大屏页面初始化

This commit is contained in:
2026-03-06 17:25:46 +08:00
parent b9d209f7ef
commit 5ce6c6800f
9 changed files with 179 additions and 51 deletions

View File

@@ -11,6 +11,13 @@ export function getHomeMenuList(params) {
})
}
export function getHomeMenuPlist(params) {
return request({
url: '/biz/homeMenu/pList',
method: 'get',
params: params
})
}
/**
* 获取指标信息列表
@@ -33,3 +40,24 @@ export function getTreeMenuList(params) {
}
/**
* 保存菜单信息列表
*/
export function getHomeMenuSave(data) {
return request({
url: '/biz/homeMenu/save',
method: 'post',
data
})
}
/**
* 删除菜单信息
*/
export function getHomeMenuDelete(params) {
return request({
url: '/biz/homeMenu/delete',
method: 'post',
params: params
})
}

View File

@@ -34,3 +34,13 @@ export function getHomeRoleAssign(data) {
}
/**
* 删除角色信息
*/
export function getHomeRoleDelete(params) {
return request({
url: '/biz/homeRole/delete',
method: 'post',
params: params
})
}

View File

@@ -15,6 +15,12 @@
clearable
>
<el-option label="根目录" value="0" />
<el-option
v-for="item in pData"
:key="item.menuId"
:label="item.menuName"
:value="item.menuId"
/>
</el-select>
</el-form-item>
</div>
@@ -61,7 +67,6 @@
v-model="formData.sort"
placeholder="请输入菜单序号"
clearable
type="number"
/>
</el-form-item>
</div>
@@ -122,9 +127,9 @@
</template>
<script setup>
import { ref, computed } from 'vue'
import { ref, computed , onMounted } from 'vue'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import { getHomeMenuList, getHomeMenuSave, getHomeMenuDelete, getHomeMenuPlist } from '@/api/bizMenu'
const props = defineProps({
formData: {
type: Object,
@@ -134,7 +139,7 @@ const props = defineProps({
menuName: '',
menuType: '',
path: '',
sort: 0,
sort: '0',
isIframe: '',
menuIcon: '',
ustatus: '1',
@@ -148,6 +153,8 @@ const props = defineProps({
const formRef = ref(null)
const pData = ref()
const iconList = computed(() => {
return Object.keys(ElementPlusIconsVue).filter(name =>
!name.includes('Internal') && !name.includes('Icon')
@@ -187,6 +194,20 @@ const resetForm = () => {
}
defineExpose({ validate, resetForm })
const getPlistData = async () =>{
try {
const res = await getHomeMenuPlist();
pData.value = res || [];
} catch (error) {
console.log(error);
}
}
onMounted(() => {
getPlistData();
})
</script>
<style scoped>

View File

@@ -50,7 +50,7 @@
row-key="menuId"
>
<template #columns>
<el-table-column prop="menuName" label="菜单名称" width="225" :tree-node="true" />
<el-table-column prop="menuName" label="菜单名称" width="200" :tree-node="true" fixed="left" />
<el-table-column label="菜单类型" width="100">
<template #default="scope">
<el-tag :type="scope.row.menuType === 'M' ? 'info' : scope.row.menuType === 'C' ? 'primary' : 'warning'">
@@ -58,8 +58,8 @@
</el-tag>
</template>
</el-table-column>
<el-table-column prop="path" label="路由地址" width="225" />
<el-table-column prop="sort" label="序号" sortable />
<el-table-column prop="path" label="路由地址" show-overflow-tooltip="true" />
<el-table-column prop="sort" label="序号" sortable width="80" />
<el-table-column label="是否外链" width="100">
<template #default="scope">
<span>{{ scope.row.isIframe === '1' ? '是' : '否' }}</span>
@@ -101,6 +101,7 @@
<PDialog
v-model="dialogVisible"
:loading="saveLoading"
:title="isEdit ? '编辑数据' : '新增数据'"
@close="handleDialogClose"
@reset="handleDialogReset"
@@ -118,7 +119,7 @@ import CSearch from '@/components/Search/proSearch.vue'
import PDialog from '@/components/Dialog/proDialog.vue'
import TreeTable from '@/components/Table/proTreeTable.vue'
import { ElMessageBox, ElMessage } from 'element-plus'
import { getHomeMenuList } from '@/api/bizMenu'
import { getHomeMenuList, getHomeMenuSave, getHomeMenuDelete } from '@/api/bizMenu'
import VForm from './form.vue'
const props = defineProps({
@@ -134,9 +135,11 @@ const searchForm = reactive({
ustatus: '',
})
const saveLoading = ref(false)
const dialogVisible = ref(false)
const isEdit = ref(false)
const formData = ref({})
const currentRow = ref({})
const formComponentRef = ref(null)
const tableData = ref()
@@ -175,35 +178,40 @@ const getTreeListData = async () => {
}
}
const handleAdd = () => {
isEdit.value = false
formData.value = {}
currentRow.value = {}
dialogVisible.value = true
}
const handleEdit = (row) => {
isEdit.value = true
formData.value = { ...row }
currentRow.value = { ...row }
dialogVisible.value = true
}
const handleDelete = async (row) => {
try {
await ElMessageBox.confirm(
"确定要删除此菜单吗?",
'删除确认',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
ElMessageBox.confirm('确定要删除此菜单吗?', '删除确认', {
type: 'warning',
closeOnClickModal: false,
showClose: false
})
.then(async () => {
const reqParams = {
menuId: row.menuId
}
);
ElMessage.success('删除成功!');
getTreeListData();
} catch (error) {
console.error('删除失败', error);
}
const res = await getHomeMenuDelete(reqParams);
ElMessage.success(res.msg);
getTreeListData();
})
.catch(() => {
ElMessage.info('已取消删除菜单操作');
});
}
const handleAdd = () => {
isEdit.value = false
formData.value = {}
dialogVisible.value = true
}
const handleExport = () => {
console.log('导出菜单数据');
@@ -212,6 +220,7 @@ const handleExport = () => {
const handleDialogClose = () => {
formData.value = {}
isEdit.value = false
currentRow.value = {}
dialogVisible.value = false
}
@@ -230,12 +239,22 @@ const handleSave = async () => {
return
}
}
setTimeout(() => {
ElMessage.success(isEdit.value ? '编辑成功' : '新增成功')
dialogVisible.value = false
getTreeListData()
}, 500)
try {
saveLoading.value = true
const reqParams = {
...formData.value,
isEdit: isEdit.value,
menuId: currentRow.value?.menuId
}
const res = await getHomeMenuSave(reqParams);
saveLoading.value = false
dialogVisible.value = false;
ElMessage.success(res.msg);
getTreeListData();
} catch (error) {
console.log(error);
}
}
watch(

View File

@@ -39,11 +39,11 @@
<script setup>
import { ref, onMounted } from 'vue'
import { ElMessage } from 'element-plus'
import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
import ResizablePage from '@/components/Table/proResizable.vue'
import FilterSelect from '@/components/Table/proFilterSelect.vue'
import PDialog from '@/components/Dialog/proDialog.vue'
import { getHomeRoleList, getHomeRoleAssign } from '@/api/bizRole'
import { getHomeRoleList, getHomeRoleAssign, getHomeRoleDelete } from '@/api/bizRole'
import vUser from './list.vue'
import vRole from './role.vue'
@@ -76,7 +76,22 @@ const handleEdit = (item) => {
}
const handleDelete = (item) => {
console.log('删除', item)
ElMessageBox.confirm('确定要删除当前角色吗?', '删除确认', {
type: 'warning',
closeOnClickModal: false,
showClose: false
})
.then(async () => {
const reqParams = {
roleId: item.roleId
}
const res = await getHomeRoleDelete(reqParams);
ElMessage.success(res.msg);
getListData();
})
.catch(() => {
ElMessage.info('已取消删除角色操作');
});
}
const handleView = (item) => {

View File

@@ -52,11 +52,11 @@
@current-change="handleCurrentChange"
>
<template #columns>
<el-table-column prop="createTime" label="记录日期" width="180" />
<el-table-column prop="createTime" label="记录日期" width="180" fixed="left" />
<el-table-column prop="userName" label="登录账户" />
<el-table-column prop="uname" label="用户名称" />
<el-table-column prop="sex" label="性别" />
<el-table-column prop="email" label="电子邮箱" />
<el-table-column prop="email" label="电子邮箱" width="225" show-overflow-tooltip="true" />
<el-table-column prop="phone" label="联系电话" />
<el-table-column prop="ustatus" label="状态" min-width="100" align="center">
<template #default="scope">

View File

@@ -56,7 +56,7 @@
<el-table-column prop="userName" label="登录账户" />
<el-table-column prop="uname" label="用户名称" />
<el-table-column prop="sex" label="性别" sortable />
<el-table-column prop="email" label="电子邮箱" />
<el-table-column prop="email" label="电子邮箱" width="225" show-overflow-tooltip="true" />
<el-table-column prop="phone" label="联系电话" />
<el-table-column prop="ustatus" label="状态" min-width="100" align="center" sortable>
<template #default="scope">
@@ -90,6 +90,7 @@
<PDialog
v-model="dialogVisible"
:loading="saveLoading"
:title="isEdit ? '编辑数据' : '新增数据'"
@close="handleDialogClose"
@reset="handleDialogReset"
@@ -113,7 +114,7 @@ import PDialog from '@/components/Dialog/proDialog.vue'
import VForm from './form.vue'
const formComponentRef = ref(null)
const saveLoading = ref(false)
const loading = ref(false)
const searchForm = reactive({
uname: '',
@@ -269,7 +270,7 @@ const handleSave = async () => {
return
}
}
saveLoading.value = true
try {
const reqParams = {
...formData.value,
@@ -277,9 +278,10 @@ const handleSave = async () => {
userId: currentRow.value?.userId
}
const res = await getHomeUserSave(reqParams);
saveLoading.value = false;
dialogVisible.value = false;
ElMessage.success(res.msg);
getDataList();
ElMessage.success(res.msg)
} catch (error) {
console.log(error);
}

View File

@@ -2,7 +2,7 @@ package com.mini.mybigscreen.biz.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.mini.mybigscreen.Model.Menu;
import com.mini.mybigscreen.Model.Message;
import com.mini.mybigscreen.Model.Result;
@@ -10,9 +10,7 @@ import com.mini.mybigscreen.Model.TreeMenu;
import com.mini.mybigscreen.biz.domain.HomeMenu;
import com.mini.mybigscreen.biz.service.HomeMenuService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.stream.Collectors;
@@ -90,6 +88,22 @@ public class HomeMenuController {
return Result.success(menuList);
}
/**
* 父级菜单获取
*/
@GetMapping("pList")
public Result<?> getPlist() {
LambdaQueryWrapper<HomeMenu> parentQuery = new LambdaQueryWrapper<HomeMenu>()
.eq(HomeMenu::getUstatus, "1")
.eq(HomeMenu::getParentId, "0")
.orderByAsc(HomeMenu::getSort);
List<HomeMenu> pMenus = menuService.list(parentQuery);
return Result.success(pMenus);
}
/**
* 树形菜单
*/
@GetMapping("treeList")
public Result<?> getTreeList() {
List<TreeMenu> menuList = new ArrayList<>();
@@ -117,6 +131,9 @@ public class HomeMenuController {
}
/**
* 用户角色菜单
*/
@GetMapping("userList")
public Result<?> getUserList() {
List<Menu> menuList = new ArrayList<>();
@@ -145,13 +162,25 @@ public class HomeMenuController {
return Result.success(menuList);
}
public Result<Message> save() {
return Result.success(new Message("数据新增成功", 200));
/**
* 新增/修改
*/
@PostMapping("save")
public Result<Message> save(@RequestBody HomeMenu homeMenu) {
boolean success = homeMenu.getIsEdit()
? menuService.update(homeMenu,
new LambdaUpdateWrapper<HomeMenu>().eq(HomeMenu::getMenuId, homeMenu.getMenuId())
) : menuService.save(homeMenu);
return Result.success(new Message(homeMenu.getIsEdit() ? "数据修改成功" : "数据新增成功", 200));
}
public Result<Message> delete() {
/**
* 删除
*/
@PostMapping("delete")
public Result<Message> delete(String menuId) {
menuService.removeById(menuId);
return Result.success(new Message("数据删除成功", 200));
}

View File

@@ -83,7 +83,11 @@ public class HomeRoleController {
}
public Result<Message> delete() {
@PostMapping("delete")
public Result<Message> delete(String roleId) {
roleService.removeById(roleId);
roleMenuService.remove(new LambdaQueryWrapper<HomeRoleMenu>()
.eq(HomeRoleMenu::getRoleId, roleId));
return Result.success(new Message("数据删除成功", 200));
}
}