u
This commit is contained in:
1 parent
ff327ba2fd
commit
1217f7df5f
10 files changed
+503
-6
No files matched your search
@@ -48,7 +48,7 @@ onMounted(() => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="company-detail-page">
|
||||
<div class="detail-wrapper">
|
||||
<div class="detail-container">
|
||||
<div class="header-region">
|
||||
<el-avatar shape="square" :size="64" class="logo" :src="companyDetail.logo || '/no-avatar.png'" />
|
||||
@@ -150,7 +150,7 @@ onMounted(() => {
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.company-detail-page {
|
||||
.detail-wrapper {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
@@ -1,12 +1,170 @@
|
||||
<script lang="ts" setup>
|
||||
import type { NavMenuItem } from '@/components/nav-menu/type'
|
||||
import { Search } from '@element-plus/icons-vue'
|
||||
import { computed, nextTick, ref, watch } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import NavMenu from '@/components/nav-menu/index.vue'
|
||||
|
||||
const searchKey = ref('')
|
||||
const route = useRoute()
|
||||
|
||||
const menuRef = ref()
|
||||
|
||||
const menuList: NavMenuItem [] = [
|
||||
{
|
||||
label: '资料设置',
|
||||
index: '/settings/info',
|
||||
icon: 'hugeicons:setting-07',
|
||||
children: [
|
||||
{
|
||||
label: '公司信息设置',
|
||||
index: '/settings/info/company',
|
||||
icon: 'hugeicons:building-02',
|
||||
},
|
||||
{
|
||||
label: '成员设置',
|
||||
index: '/settings/info/company-user',
|
||||
icon: 'hugeicons:user-settings-01',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '创作者中心',
|
||||
index: '/settings/forum',
|
||||
icon: 'hugeicons:edit-01',
|
||||
children: [
|
||||
{
|
||||
label: '首页',
|
||||
index: '/settings/forum/home',
|
||||
icon: 'hugeicons:home-03',
|
||||
},
|
||||
{
|
||||
label: '写文章',
|
||||
index: '/settings/forum/editor',
|
||||
icon: 'hugeicons:edit-04',
|
||||
},
|
||||
{
|
||||
label: '帖子管理',
|
||||
index: '/settings/forum/post',
|
||||
icon: 'hugeicons:material-and-texture',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
/**
|
||||
* 递归过滤菜单
|
||||
*/
|
||||
function filterMenu(
|
||||
list: NavMenuItem[],
|
||||
keyword: string,
|
||||
): NavMenuItem[] {
|
||||
if (!keyword)
|
||||
return list
|
||||
|
||||
return list
|
||||
.map((item) => {
|
||||
const hitSelf = item.label.includes(keyword)
|
||||
|
||||
// 递归检查子节点是否命中(但不裁剪 children)
|
||||
const hitChildren = item.children
|
||||
? filterMenu(item.children, keyword).length > 0
|
||||
: false
|
||||
|
||||
// 自己命中 或 任一子节点命中 → 保留整个节点
|
||||
if (hitSelf || hitChildren) {
|
||||
return item
|
||||
}
|
||||
|
||||
return null
|
||||
})
|
||||
.filter(Boolean) as NavMenuItem[]
|
||||
}
|
||||
|
||||
const filteredMenu = computed(() =>
|
||||
filterMenu(menuList, searchKey.value.trim()),
|
||||
)
|
||||
function collectOpeneds(menu: NavMenuItem[], result: string[] = []) {
|
||||
for (const item of menu) {
|
||||
if (item.children?.length) {
|
||||
result.push(item.index)
|
||||
collectOpeneds(item.children, result)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
watch(searchKey, async (val) => {
|
||||
await nextTick()
|
||||
|
||||
if (!menuRef.value)
|
||||
return
|
||||
|
||||
if (val) {
|
||||
const openeds = collectOpeneds(filteredMenu.value)
|
||||
openeds.forEach((index) => {
|
||||
menuRef.value!.open(index)
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="">
|
||||
settings
|
||||
<div class="settings-wrapper">
|
||||
<div class="left-menu">
|
||||
<el-input
|
||||
v-model="searchKey"
|
||||
placeholder="搜索菜单"
|
||||
size="large"
|
||||
:prefix-icon="Search"
|
||||
clearable
|
||||
/>
|
||||
|
||||
<el-menu
|
||||
ref="menuRef"
|
||||
router
|
||||
:default-active="route.path"
|
||||
>
|
||||
<NavMenu :menu="filteredMenu" />
|
||||
</el-menu>
|
||||
</div>
|
||||
|
||||
<div class="right-view">
|
||||
<router-view />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
//
|
||||
.settings-wrapper {
|
||||
display: flex;
|
||||
gap: 40px;
|
||||
margin-top: 30px;
|
||||
padding: 0px 240px;
|
||||
height: 800px;
|
||||
|
||||
.left-menu {
|
||||
font-size: 16px;
|
||||
overflow-y: auto;
|
||||
width: 240px;
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
flex-shrink: 0;
|
||||
:deep(.el-input__wrapper) {
|
||||
margin: 12px 12px 4px 12px;
|
||||
}
|
||||
|
||||
:deep(.el-menu) {
|
||||
border-right: none;
|
||||
}
|
||||
}
|
||||
|
||||
.right-view {
|
||||
width: 1200px;
|
||||
flex-shrink: 0;
|
||||
overflow-y: auto;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,163 @@
|
||||
<script lang="ts" setup>
|
||||
import { reactive } from 'vue'
|
||||
import WangEditor from '@/components/wang-editor/index.vue'
|
||||
|
||||
const form = reactive({
|
||||
name: '',
|
||||
region: '',
|
||||
date1: '',
|
||||
date2: '',
|
||||
delivery: false,
|
||||
type: [],
|
||||
resource: '',
|
||||
desc: '',
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="company-wrapper">
|
||||
<div class="form-item">
|
||||
<div class="form-header">
|
||||
<span class="form-title">
|
||||
基础信息
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<el-form
|
||||
:model="form"
|
||||
label-width="auto"
|
||||
label-position="top"
|
||||
>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="24">
|
||||
<el-form-item>
|
||||
<el-avatar :size="86" shape="square" />
|
||||
<div class="logo-upload">
|
||||
<el-button type="primary" plain>
|
||||
上传LOGO
|
||||
</el-button>
|
||||
<span>支持 JPG、PNG 格式,文件大小不超过 2MB</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="公司名称">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属行业">
|
||||
<el-select v-model="form.region" placeholder="please select your zone">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="成立时间">
|
||||
<el-date-picker
|
||||
v-model="form.date1"
|
||||
type="date"
|
||||
placeholder="Pick a date"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="员工规模">
|
||||
<el-input v-model="form.desc" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="公司地址">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="公司详细地址">
|
||||
<el-input v-model="form.desc" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系邮箱">
|
||||
<el-input v-model="form.desc" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-header">
|
||||
<span class="form-title">
|
||||
公司简介
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<el-form :model="form" label-width="auto">
|
||||
<el-form-item>
|
||||
<el-input v-model="form.name" type="textarea" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<div class="form-item">
|
||||
<div class="form-header">
|
||||
<span class="form-title">
|
||||
公司介绍
|
||||
</span>
|
||||
</div>
|
||||
<WangEditor />
|
||||
</div>
|
||||
|
||||
<div class="form-footer">
|
||||
<el-button>重置</el-button>
|
||||
<el-button type="primary">
|
||||
保存
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.company-wrapper {
|
||||
padding: 24px 32px;
|
||||
|
||||
.form-item {
|
||||
margin-bottom: 16px;
|
||||
.form-header {
|
||||
margin-bottom: 16px;
|
||||
.form-title {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
.logo-upload {
|
||||
margin-left: 16px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
span {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-footer {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
:deep(.el-button){
|
||||
width: 120px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in new issue
Block a user