refactor: 前端布局 菜单,部门:重构

This commit is contained in:
H0nGzA1
2023-05-17 21:25:59 +08:00
parent 3cccfaa7f4
commit 17b67e43c9
2 changed files with 470 additions and 433 deletions

View File

@@ -1,7 +1,7 @@
<template>
<fs-page>
<el-row class="mx-2">
<el-col :span="4" class="p-1">
<splitpanes>
<pane max-size="20">
<el-card :body-style="{ height: '100%' }">
<p class="font-mono font-black text-center text-xl pb-5">部门列表</p>
<el-input v-model="filterText" :placeholder="placeholder"/>
@@ -20,13 +20,15 @@
@node-click="handleNodeClick"
>
<template #default="{ node, data }">
<span v-if="data.status" class="text-center font-black text-xl"><SvgIcon :name="node.data.icon" />&nbsp;{{ node.label }}</span>
<span v-else class="text-center font-black text-xl text-red-700"><SvgIcon :name="node.data.icon" />&nbsp;{{ node.label }}</span>
<span v-if="data.status" class="text-center font-black text-xl"><SvgIcon
:name="node.data.icon"/>&nbsp;{{ node.label }}</span>
<span v-else class="text-center font-black text-xl text-red-700"><SvgIcon
:name="node.data.icon"/>&nbsp;{{ node.label }}</span>
</template>
</el-tree>
</el-card>
</el-col>
<el-col :span="20" class="p-1">
</pane>
<pane>
<el-card :body-style="{ height: '100%' }">
<el-form ref="formRef" :rules="rules" :model="form" label-width="120px" label-position="right">
<el-divider>
@@ -34,25 +36,39 @@
</el-divider>
<el-row>
<el-col :span="10">
<el-form-item label="部门ID" prop="id"> <el-input v-model="form.id" disabled /> </el-form-item>
<el-form-item label="部门ID" prop="id">
<el-input v-model="form.id" disabled/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="父级部门ID" prop="parent"> <el-input v-model="form.parent" /> </el-form-item>
<el-form-item label="父级部门ID" prop="parent">
<el-input v-model="form.parent"/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item required label="部门名称" prop="name"> <el-input v-model="form.name" /> </el-form-item>
<el-form-item required label="部门名称" prop="name">
<el-input v-model="form.name"/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item required label="部门标识" prop="key"> <el-input v-model="form.key" /> </el-form-item>
<el-form-item required label="部门标识" prop="key">
<el-input v-model="form.key"/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="负责人" prop="owner"> <el-input v-model="form.owner" /> </el-form-item>
<el-form-item label="负责人" prop="owner">
<el-input v-model="form.owner"/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="联系电话" prop="phone"> <el-input v-model="form.phone" /> </el-form-item>
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone"/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="邮箱" prop="email"> <el-input v-model="form.email" /> </el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email"/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="排序" prop="sort">
@@ -63,21 +79,28 @@
<el-col class="center">
<el-divider>
<el-button @click="saveMenu()" type="primary" round>保存</el-button>
<el-button @click="newMenu()" type="success" round :disabled="!form.id">新建</el-button>
<el-button @click="addChildMenu()" type="info" round :disabled="!form.id">添加子级</el-button>
<el-button @click="addSameLevelMenu()" type="warning" round :disabled="!form.id">添加</el-button>
<el-button @click="deleteMenu()" type="danger" round :disabled="!form.id">删除部门</el-button>
<el-button @click="newMenu()" type="success" round :disabled="!form.id">新建
</el-button>
<el-button @click="addChildMenu()" type="info" round :disabled="!form.id">添加
</el-button>
<el-button @click="addSameLevelMenu()" type="warning" round :disabled="!form.id">
添加同级
</el-button>
<el-button @click="deleteMenu()" type="danger" round :disabled="!form.id">删除部门
</el-button>
</el-divider>
</el-col>
</el-row>
</el-form>
</el-card>
</el-col>
</el-row>
</pane>
</splitpanes>
</fs-page>
</template>
<script lang="ts" setup>
import {Splitpanes, Pane} from 'splitpanes';
import 'splitpanes/dist/splitpanes.css';
import * as api from './api';
import {ElForm, ElMessageBox, ElTree, FormRules} from 'element-plus';
import {ref, onMounted, reactive, toRaw, watch} from 'vue';

View File

@@ -1,7 +1,7 @@
<template>
<fs-page>
<el-row class="mx-2">
<el-col :span="4" class="p-1">
<splitpanes>
<pane max-size="20" min-size="16" >
<el-card :body-style="{ height: '100%' }">
<p class="font-mono font-black text-center text-xl pb-5">
菜单列表
@@ -12,8 +12,10 @@
</el-tooltip>
</p>
<el-input v-model="filterText" :placeholder="placeholder"/>
<el-tree ref="treeRef" class="font-mono font-bold leading-6 text-7xl" :data="data" :props="treeProps"
:filter-node-method="filterNode" :load="loadNode" :allow-drag="allowDrag" :allow-drop="allowDrop"
<el-tree ref="treeRef" class="font-mono font-bold leading-6 text-7xl" :data="data"
:props="treeProps"
:filter-node-method="filterNode" :load="loadNode" :allow-drag="allowDrag"
:allow-drop="allowDrop"
@node-drop="nodeDrop" lazy icon="ArrowRightBold" :indent="12" draggable
@node-click="handleNodeClick">
<template #default="{ node, data }">
@@ -26,25 +28,33 @@
</template>
</el-tree>
</el-card>
</el-col>
<el-col :span="6" class="p-1">
</pane>
<pane min-size="30" >
<el-card :body-style="{ height: '100%' }">
<el-form ref="formRef" :rules="rules" :model="form" label-width="80px" label-position="right">
<el-form ref="formRef" :rules="rules" :model="form" label-width="80px"
label-position="right">
<el-alert :title="content" type="success" effect="dark" :closable="false" center/>
<el-divider>
<strong>菜单配置</strong>
</el-divider>
<el-form-item label="菜单ID" prop="id"> <el-input v-model="form.id" disabled />
<el-form-item label="菜单ID" prop="id">
<el-input v-model="form.id" disabled/>
</el-form-item>
<el-form-item label="父级ID" prop="parent"> <el-input v-model="form.parent" /> </el-form-item>
<el-form-item required label="菜单名称" prop="name"> <el-input v-model="form.name" />
<el-form-item label="父级ID" prop="parent">
<el-input v-model="form.parent"/>
</el-form-item>
<el-form-item required label="菜单名称" prop="name">
<el-input v-model="form.name"/>
</el-form-item>
<el-form-item label="组件地址" prop="component">
<el-autocomplete class="w-full" v-model="form.component"
:fetch-suggestions="querySearch" :trigger-on-focus="false" clearable debounce="100"
:fetch-suggestions="querySearch" :trigger-on-focus="false"
clearable
debounce="100"
placeholder="输入组件地址"/>
</el-form-item>
<el-form-item required label="Url" prop="web_path"> <el-input v-model="form.web_path" />
<el-form-item required label="Url" prop="web_path">
<el-input v-model="form.web_path"/>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right"/>
@@ -69,22 +79,26 @@
<div>
<el-button @click="saveMenu()" type="primary" round>保存</el-button>
<el-button @click="newMenu()" type="success" round :disabled="!form.id">新建</el-button>
<el-button @click="addChildMenu()" type="warning" round :disabled="!form.id">添加子级</el-button>
<el-button @click="addChildMenu()" type="warning" round :disabled="!form.id">添加子级
</el-button>
<!-- <el-button @click="addSameLevelMenu()" type="warning" round>添加同级</el-button>-->
<el-button @click="deleteMenu()" type="danger" round :disabled="!form.id">删除菜单</el-button>
<el-button @click="deleteMenu()" type="danger" round :disabled="!form.id">删除菜单
</el-button>
</div>
</el-card>
</el-col>
<el-col :span="14" class="p-1">
</pane>
<pane min-size="30">
<el-card :body-style="{ height: '100%' }">
<menuButton :select-menu="form"/>
</el-card>
</el-col>
</el-row>
</pane>
</splitpanes>
</fs-page>
</template>
<script lang="ts" setup>
import {Splitpanes, Pane} from 'splitpanes';
import 'splitpanes/dist/splitpanes.css';
import * as api from './api';
import * as menuButoonApi from './components/menuButton/api';
import {ElForm, ElTree, FormRules, ElMessageBox} from 'element-plus';