123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <template>
- <div class="left-nav">
- <el-menu default-active="1-1" class="el-menu-vertical-demo">
- <el-sub-menu index="1">
- <template #title>
- <i class="el-icon-location"></i>
- <span>工作台</span>
- </template>
- <el-menu-item-group>
- <el-menu-item @click="router.push({ name: 'home' })" index="1-1">工作台概览</el-menu-item>
- </el-menu-item-group>
- </el-sub-menu>
- <el-sub-menu index="2">
- <template #title>
- <i class="el-icon-location"></i>
- <span>工作队列({{ queues.length }})</span>
- </template>
- <el-menu-item-group>
- <template v-for="(queue, index) in queues" :key="queue.id">
- <el-menu-item :index="'2' + '-' + index" @click="queueClicked(queue)">
- <!-- <template #title> -->
- <span>{{ queue.name }}</span>
- <el-tag v-if="queue.type == 'input'" effect="light" round>START</el-tag>
- <!-- </template> -->
- </el-menu-item>
- </template>
- </el-menu-item-group>
- </el-sub-menu>
- <el-sub-menu index="3">
- <template #title>
- <i class="el-icon-location"></i>
- <span>知识图谱</span>
- </template>
- <el-menu-item-group>
- <el-menu-item index="3-1" @click="handleMenuClick('graph')">全部图谱</el-menu-item>
- </el-menu-item-group>
- </el-sub-menu>
- <el-sub-menu index="4">
- <template #title>
- <i class="el-icon-location"></i>
- <span>工作人员({{ workers.length }})</span>
- </template>
- <el-menu-item-group>
- <el-menu-item v-for="worker in workers" :key="worker.id" @click="selectWorker(worker)"
- :index="'4-' + worker.id">
- <el-icon>
- <User />
- </el-icon>
- <span>{{ worker.name }}</span>
- <el-tag :type="worker.status === '空闲' ? 'success' : 'warning'" size="small">
- {{ worker.status }}
- </el-tag>
- </el-menu-item>
- </el-menu-item-group>
- </el-sub-menu>
- </el-menu>
- <!-- <div class="nav-section">
- <h3>工作台</h3>
- <el-menu :default-active="$route.path" router>
- <el-menu-item index="/home" :route="{ path: '/home' }">
- <template #title>
- <el-icon></el-icon>
- <span>工作台概览</span>
- </template>
- </el-menu-item>
- </el-menu>
- </div>
- <div class="nav-section">
- <h3>工作队列({{ queues.length }})</h3>
- <el-menu>
- <template v-for="queue in queues" :key="queue.id">
- <el-menu-item :index="'queue' + '_' + queue.id" @click="queueClicked(queue)">
- <template #title>
- <span>{{ queue.name }}</span>
- <el-tag v-if="queue.type == 'input'" effect="light" round>START</el-tag>
- </template>
- </el-menu-item>
- </template>
- </el-menu>
- </div>
- <div class="nav-section">
- <h3>知识图谱</h3>
- <el-menu>
- <el-menu-item @click="handleMenuClick('graph')">
- <span>全部图谱</span>
- </el-menu-item>
- </el-menu>
- </div>
- <div class="nav-section">
- <h3>工作人员({{ workers.length }})</h3>
- <el-menu>
- <el-menu-item v-for="worker in workers" :key="worker.id" @click="selectWorker(worker)">
- <el-icon>
- <User />
- </el-icon>
- <span>{{ worker.name }}</span>
- <el-tag :type="worker.status === '空闲' ? 'success' : 'warning'" size="small">
- {{ worker.status }}
- </el-tag>
- </el-menu-item>
- </el-menu>
- </div> -->
- <!-- <div class="nav-section">
- <h3>知识库管理平台</h3>
- <el-menu>
- <el-menu-item @click="router.push({ name: 'kmplatform' })">
- <span>知识库管理</span>
- </el-menu-item>
- </el-menu>
- </div> -->
- </div>
- </template>
- <script setup lang="ts">
- import { ref, onMounted } from 'vue'
- import { useRouter } from 'vue-router'
- import { User } from '@element-plus/icons-vue'
- import type { WorkQueue, Worker } from '../libs/dataset.ts'
- const router = useRouter();
- const emit = defineEmits(['selectQueue', 'selectWorker', 'selectMenu']);
- // 模拟数据
- const queues = [
- {
- id: 0,
- name: "全部工作",
- taskCount: 1,
- tasks: []
- },
- {
- id: 6,
- name: "WORD文档抽取",
- taskCount: 1,
- tasks: [],
- type: "input"
- },
- {
- id: 1,
- name: "PDF文档抽取",
- taskCount: 1,
- tasks: [],
- type: "input"
- },
- // {
- // id: 2,
- // name: "文本校对",
- // taskCount: 1,
- // tasks: []
- // },
- {
- id: 3,
- name: "文本切片队列",
- taskCount: 1,
- tasks: []
- },
- {
- id: 4,
- name: "知识抽取",
- taskCount: 1,
- tasks: []
- },
- {
- id: 5,
- name: "知识图谱构建",
- taskCount: 1,
- tasks: []
- },
- ]
- const workers = ref<Worker[]>(Array.from({ length: 2 }, (_, i) => ({
- id: i + 1,
- name: `后台服务 ${i + 1}`,
- status: Math.random() > 0.5 ? '忙碌' : '空闲'
- })))
- const selectedQueue = ref(null)
- const selectedWorker = ref<Worker | null>(null)
- const queueClicked = (queue: any) => {
- selectedQueue.value = queue;
- selectedWorker.value = null;
- emit('selectQueue', { id: queue.id });
- }
- const handleMenuClick = (menu: string) => {
- console.log("handleMenuClick called with menu:", menu); // 调试输出
- emit('selectMenu', { name: menu });
- }
- const selectWorker = (worker: Worker) => {
- selectedWorker.value = worker
- selectedQueue.value = null
- }
- </script>
- <style scoped lang="less">
- .left-nav {
- // width: 280px;
- height: 100vh;
- // border-right: 0px solid #e4e7ed;
- // padding: 20px;
- // overflow: auto;
- // overflow-y: auto;
- // background-color: #e4e7ed;
- // background-color: #d5e9fe;
- .nav-section {
- margin-bottom: 30px;
- h3 {
- margin-bottom: 15px;
- color: #666;
- }
- }
- }
- .el-menu-vertical-demo {
- height: 100%;
- }
- </style>
|