管理界面完善1

This commit is contained in:
妖姐 2024-01-16 01:08:31 +08:00
parent ac114ca9a2
commit 8e162b97a6
23 changed files with 395 additions and 1 deletions

114
package-lock.json generated
View File

@ -10,6 +10,8 @@
"dependencies": {
"axios": "^1.6.2",
"flowbite": "^2.2.1",
"p": "^0.2.0",
"view-ui-plus": "^1.3.15",
"vue": "^3.3.11",
"vue-router": "^4.2.5"
},
@ -817,6 +819,11 @@
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
"dev": true
},
"node_modules/async-validator": {
"version": "3.5.2",
"resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz",
"integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ=="
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@ -875,6 +882,11 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"node_modules/batch-processor": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/batch-processor/-/batch-processor-1.0.0.tgz",
"integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA=="
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://mirrors.cloud.tencent.com/npm/binary-extensions/-/binary-extensions-2.2.0.tgz",
@ -1032,6 +1044,11 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"node_modules/countup.js": {
"version": "1.9.3",
"resolved": "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz",
"integrity": "sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A=="
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://mirrors.cloud.tencent.com/npm/cssesc/-/cssesc-3.0.0.tgz",
@ -1049,6 +1066,19 @@
"resolved": "https://mirrors.cloud.tencent.com/npm/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/dayjs": {
"version": "1.11.10",
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz",
"integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
},
"node_modules/deepmerge": {
"version": "2.2.1",
"resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-2.2.1.tgz",
"integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@ -1075,6 +1105,14 @@
"integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==",
"dev": true
},
"node_modules/element-resize-detector": {
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz",
"integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==",
"dependencies": {
"batch-processor": "1.0.0"
}
},
"node_modules/esbuild": {
"version": "0.19.10",
"resolved": "https://mirrors.cloud.tencent.com/npm/esbuild/-/esbuild-0.19.10.tgz",
@ -1382,6 +1420,11 @@
"jiti": "bin/jiti.js"
}
},
"node_modules/js-calendar": {
"version": "1.2.3",
"resolved": "https://registry.npmmirror.com/js-calendar/-/js-calendar-1.2.3.tgz",
"integrity": "sha512-dAA1/Zbp4+c5E+ARCVTIuKepXsNLzSYfzvOimiYD4S5eeP9QuplSHLcdhfqFSwyM1o1u6ku6RRRCyaZ0YAjiBw=="
},
"node_modules/lilconfig": {
"version": "2.1.0",
"resolved": "https://mirrors.cloud.tencent.com/npm/lilconfig/-/lilconfig-2.1.0.tgz",
@ -1397,6 +1440,16 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
"node_modules/lodash.chunk": {
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz",
"integrity": "sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w=="
},
"node_modules/lodash.throttle": {
"version": "4.1.1",
"resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
"integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="
},
"node_modules/magic-string": {
"version": "0.30.5",
"resolved": "https://mirrors.cloud.tencent.com/npm/magic-string/-/magic-string-0.30.5.tgz",
@ -1521,6 +1574,14 @@
"node": ">=0.10.0"
}
},
"node_modules/numeral": {
"version": "2.0.6",
"resolved": "https://registry.npmmirror.com/numeral/-/numeral-2.0.6.tgz",
"integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==",
"engines": {
"node": "*"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://mirrors.cloud.tencent.com/npm/object-assign/-/object-assign-4.1.1.tgz",
@ -1548,6 +1609,14 @@
"wrappy": "1"
}
},
"node_modules/p": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/p/-/p-0.2.0.tgz",
"integrity": "sha512-+FO3CEcP1no7VLm9widissk+aKCXjdx3kH59TUe8rJdGttZ0wbIPGKwW81g3H7aoIoUcl+iUrhODM1zfYE9/Zg==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://mirrors.cloud.tencent.com/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@ -1598,6 +1667,12 @@
"node": ">= 6"
}
},
"node_modules/popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npmmirror.com/popper.js/-/popper.js-1.16.1.tgz",
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
"deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1"
},
"node_modules/postcss": {
"version": "8.4.32",
"resolved": "https://mirrors.cloud.tencent.com/npm/postcss/-/postcss-8.4.32.tgz",
@ -1868,6 +1943,11 @@
"queue-microtask": "^1.2.2"
}
},
"node_modules/select": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
"integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://mirrors.cloud.tencent.com/npm/source-map-js/-/source-map-js-1.0.2.tgz",
@ -1968,6 +2048,11 @@
"node": ">=0.8"
}
},
"node_modules/tinycolor2": {
"version": "1.6.0",
"resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz",
"integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://mirrors.cloud.tencent.com/npm/to-regex-range/-/to-regex-range-5.0.1.tgz",
@ -2022,6 +2107,35 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
"node_modules/v-click-outside-x": {
"version": "3.7.1",
"resolved": "https://registry.npmmirror.com/v-click-outside-x/-/v-click-outside-x-3.7.1.tgz",
"integrity": "sha512-WmUgmcIXr9clVpm1AYS/FgHtcDicfnfoxgQCNg4O6vfk9GVnxA0vSqO321ogUo0b7czYTidj7fQENvWFMWOkUg==",
"engines": {
"node": ">=8.11.4",
"npm": "6.4.1"
}
},
"node_modules/view-ui-plus": {
"version": "1.3.15",
"resolved": "https://registry.npmmirror.com/view-ui-plus/-/view-ui-plus-1.3.15.tgz",
"integrity": "sha512-dbi3uTk8twgtpino0QFIvCb3Gck135czbnvxs2M0lOmUQMKAK7GqJ3m8IobwyWXAxkoA1+Ek8QMeC3a+InOWpQ==",
"dependencies": {
"async-validator": "^3.3.0",
"countup.js": "^1.9.3",
"dayjs": "^1.11.0",
"deepmerge": "^2.2.1",
"element-resize-detector": "^1.2.0",
"js-calendar": "^1.2.3",
"lodash.chunk": "^4.2.0",
"lodash.throttle": "^4.1.1",
"numeral": "^2.0.6",
"popper.js": "^1.14.6",
"select": "^1.1.2",
"tinycolor2": "^1.4.1",
"v-click-outside-x": "^3.7.1"
}
},
"node_modules/vite": {
"version": "5.0.10",
"resolved": "https://mirrors.cloud.tencent.com/npm/vite/-/vite-5.0.10.tgz",

View File

@ -11,6 +11,8 @@
"dependencies": {
"axios": "^1.6.2",
"flowbite": "^2.2.1",
"p": "^0.2.0",
"view-ui-plus": "^1.3.15",
"vue": "^3.3.11",
"vue-router": "^4.2.5"
},

View File

@ -2,11 +2,13 @@ import './assets/main.css'
import 'flowbite';
import { createApp } from 'vue'
import ViewUIPlus from 'view-ui-plus'
import App from './App.vue'
import router from './router'
import 'view-ui-plus/dist/styles/viewuiplus.css'
const app = createApp(App)
app.use(router)
app.use(ViewUIPlus)
app.mount('#app')

View File

@ -0,0 +1,3 @@
<template>
轮播图管理
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 日报消息管理
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 日志消息
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 消息管理
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 消息展示
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 新闻信息管理
</template>

View File

@ -0,0 +1,3 @@
<template>
this is permission
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 项目信息管理
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 项目推荐
</template>

View File

@ -0,0 +1,3 @@
<template>
this role
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 团队信息管理
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 团队简介
</template>

View File

@ -0,0 +1,3 @@
<template>
this usermanage
</template>

View File

@ -0,0 +1,3 @@
<template>
this is 用户推荐
</template>

71
src/manager/LeftBar.vue Normal file
View File

@ -0,0 +1,71 @@
<style>
.layout{
border: 1px solid #d7dde4;
background: #f5f7f9;
position: relative;
border-radius: 4px;
overflow: hidden;
color:red;
}
</style>
<template>
<div class="layout" style="height: 90vh">
<Layout>
<Layout>
<Sider hide-trigger :style="{background: '#fff'}">
<Menu active-name="1-2" theme="light" width="auto" :open-names="['1']">
<Submenu name="1">
<template #title>
<Icon type="ios-cog"></Icon>
系统管理
</template>
<MenuItem name="1-1" @click="navigateTo('/manager/UserManage')">用户管理</MenuItem>
<MenuItem name="1-2" @click="navigateTo('/manager/RoleManage')">角色管理</MenuItem>
<MenuItem name="1-3" @click="navigateTo('/manager/PermissionsManage')">权限管理</MenuItem>
<MenuItem name="1-4" @click="navigateTo('/manager/LogManage')">日志管理</MenuItem>
<MenuItem name="1-5" @click="navigateTo('/manager/DailyReportManage')">日报管理</MenuItem>
<MenuItem name="1-6" @click="navigateTo('/manager/MessageManage')" >消息管理</MenuItem>
</Submenu>
<Submenu name="2">
<template #title>
<Icon type="ios-keypad"></Icon>
首页管理
</template>
<MenuItem name="2-1" @click="navigateTo('/manager/CarouselManagement')">轮播图管理</MenuItem>
<MenuItem name="2-2" @click="navigateTo('/manager/TeamIntroduction')">团队简介</MenuItem>
<MenuItem name="2-3" @click="navigateTo('/manager/ProjectRecommendations')">项目推荐</MenuItem>
<MenuItem name="2-4" @click="navigateTo('/manager/NewsDisplay')">新闻展示</MenuItem>
<MenuItem name="2-5" @click="navigateTo('/manager/UserRecommendations')">用户推荐</MenuItem>
</Submenu>
<Submenu name="3">
<template #title>
<Icon type="ios-analytics"></Icon>
信息管理
</template>
<MenuItem name="3-1" @click="navigateTo('/manager/ProjectInformationManagement')">项目信息管理</MenuItem>
<MenuItem name="3-2" @click="navigateTo('/manager/TeamInformationManagement')">团队信息管理</MenuItem>
<MenuItem name="3-3" @click="navigateTo('/manager/NewsInformationManagement')">新闻信息管理</MenuItem>
</Submenu>
</Menu>
</Sider>
</Layout>
</Layout>
</div>
</template>
<script>
import {Icon, Layout, MenuItem, Sider, Submenu} from "view-ui-plus";
export default {
components: {Sider, Icon, MenuItem, Submenu, Layout},
methods: {
navigateTo(path) {
this.$router.push(path);
}
}
}
</script>

16
src/manager/Main.vue Normal file
View File

@ -0,0 +1,16 @@
<template>
<div style="display: flex; flex-direction: row">
<LeftBar></LeftBar>
<router-view></router-view>
</div>
</template>
<script setup>
import LeftBar from "@/manager/LeftBar.vue";
</script>

10
src/manager/MyData.vue Normal file
View File

@ -0,0 +1,10 @@
<template>
<router-view></router-view>
</template>
<script setup>
</script>

71
src/manager/header.vue Normal file
View File

@ -0,0 +1,71 @@
<style scoped>
.layout{
border: 1px solid #d7dde4;
background: #f5f7f9;
position: relative;
border-radius: 4px;
overflow: hidden;
}
.layout-logo{
width: 100px;
height: 30px;
background: #515A6E;
border-radius: 3px;
float: left;
position: relative;
/*top: 10px;*/
left: 100px;
margin: 0 auto;
/*text-align: center;*/
color:white;
}
.layout-nav{
width: 420px;
margin: 0 20px 0 auto;
}
/*.ivu-menu ivu-menu-light ivu-menu-horizontal{*/
/* width: 200px;*/
/*}*/
</style>
<template>
<div class="layout">
<Layout>
<Header>
<!-- <div style="color:white;margin:auto"> 用户管理中心</div>-->
<Menu mode="horizontal" theme="dark" active-name="1">
<div class="layout-logo">管理中心界面</div>
<div class="layout-nav" theme="dark">
<MenuItem name="1">
<Icon type="ios-navigate"></Icon>
Item 1
</MenuItem>
<MenuItem name="2">
<Icon type="ios-keypad"></Icon>
Item 2
</MenuItem>
<MenuItem name="3">
<Icon type="ios-analytics"></Icon>
Item 3
</MenuItem>
<MenuItem name="4">
<Icon type="ios-paper"></Icon>
Item 4
</MenuItem>
</div>
</Menu>
</Header>
</Layout>
</div>
</template>
<script>
import {Icon, Layout, MenuItem} from "view-ui-plus";
export default {
components: {Layout, Icon, MenuItem}
}
</script>

16
src/manager/manager.vue Normal file
View File

@ -0,0 +1,16 @@
<template>
<div style="display: flex; flex-direction: column">
<MyHeader/>
<Main></Main>
</div>
</template>
<script setup>
import MyHeader from "@/manager/header.vue";
import Main from "@/manager/Main.vue";
</script>

View File

@ -24,6 +24,56 @@ const router = createRouter({
name:'success',
component:()=>import('../components/success.vue')
},
{
path:'/manager',
name:'manager',
component:()=>import('../manager/manager.vue'),
children:[{
path:'/manager/UserManage',
component:()=>import('../manager/Data/UserManage.vue')
},
{
path:'/manager/RoleManage',
component:()=>import('../manager/Data/RoleManage.vue')
}, {
path:'/manager/PermissionsManage',
component:()=>import('../manager/Data/PermissionsManage.vue')
}, {
path:'/manager/LogManage',
component:()=>import('../manager/Data/LogManage.vue')
}, {
path:'/manager/MessageManage',
component:()=>import('../manager/Data/MessageManage.vue')
}, {
path:'/manager/DailyReportManage',
component:()=>import('../manager/Data/DailyReportManage.vue')
}, {
path:'/manager/CarouselManagement',
component:()=>import('../manager/Data/CarouselManagement.vue')
}, {
path:'/manager/TeamIntroduction',
component:()=>import('../manager/Data/TeamIntroduction.vue')
},{
path:'/manager/ProjectRecommendations',
component:()=>import('../manager/Data/ProjectRecommendations.vue')
}, {
path:'/manager/NewsDisplay',
component:()=>import('../manager/Data/NewsDisplay.vue')
}, {
path:'/manager/UserRecommendations',
component:()=>import('../manager/Data/UserRecommendations.vue')
}, {
path:'/manager/ProjectInformationManagement',
component:()=>import('../manager/Data/ProjectInformationManagement.vue')
}, {
path:'/manager/TeamInformationManagement',
component:()=>import('../manager/Data/TeamInformationManagement.vue')
}, {
path:'/manager/NewsInformationManagement',
component:()=>import('../manager/Data/NewsInformationManagement.vue')
},
]
}
]
})