大屏项目初始化
This commit is contained in:
13
pom.xml
13
pom.xml
@@ -77,6 +77,19 @@
|
||||
<version>5.8.31</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>5.2.5</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Apache POI OOXML 包(xlsx格式,核心缺失项) -->
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>5.2.5</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 4. MyBatis-Plus核心(强制排除旧版mybatis-spring) -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
|
||||
13
screen-vue/src/api/bizFiles.js
Normal file
13
screen-vue/src/api/bizFiles.js
Normal file
@@ -0,0 +1,13 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
/**
|
||||
* 导出用户信息
|
||||
*/
|
||||
export function download(params) {
|
||||
return request({
|
||||
url: '/biz/homeFiles/dwonload',
|
||||
method: 'get',
|
||||
params,
|
||||
responseType: 'blob'
|
||||
});
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
|
||||
/**
|
||||
* 获取指标信息列表
|
||||
*/
|
||||
@@ -11,6 +12,28 @@ export function getHomeModuleList(params) {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指标信息列表
|
||||
*/
|
||||
export function getHomeModuleListAll(params) {
|
||||
return request({
|
||||
url: '/biz/homeModule/listAll',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息列表
|
||||
*/
|
||||
export function getHomeModuleSave(data) {
|
||||
return request({
|
||||
url: '/biz/homeModule/save',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除信息列表
|
||||
*/
|
||||
|
||||
@@ -11,6 +11,17 @@ export function getHomeRoleList(params) {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指标信息列表
|
||||
*/
|
||||
export function getHomeRoleUserList(params) {
|
||||
return request({
|
||||
url: '/biz/homeRole/userList',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取角色授权的菜单
|
||||
*/
|
||||
|
||||
@@ -43,3 +43,4 @@ export function getHomeUserDelete(params) {
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import axios from 'axios'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import router from '@/router'
|
||||
|
||||
const service = axios.create({
|
||||
@@ -39,27 +39,32 @@ service.interceptors.response.use(
|
||||
(response) => {
|
||||
const res = response.data;
|
||||
|
||||
// 1. 处理登录失效
|
||||
if (response.config.responseType === 'blob') {
|
||||
return handleFileExport(response);
|
||||
}
|
||||
|
||||
if (res.code === 401) {
|
||||
handleLoginExpired();
|
||||
return Promise.reject(res);
|
||||
}
|
||||
|
||||
// 2. 处理业务成功
|
||||
if (res.code === 200) {
|
||||
return res.data;
|
||||
}
|
||||
|
||||
// 3. 处理其他业务错误(如500)
|
||||
ElMessage.error(res.msg || '请求失败');
|
||||
return Promise.reject(res);
|
||||
},
|
||||
(error) => {
|
||||
const requestUrl = error?.config?.url || '';
|
||||
const isWhite = WHITE_LIST.some(item => requestUrl.includes(item));
|
||||
if (error.config?.responseType === 'blob') {
|
||||
handleFileExportError(error);
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
if (isWhite) {
|
||||
const errMsg = error?.response?.data?.msg || '登录请求失败,请检查网络或账号信息';
|
||||
const errMsg = error?.response?.data?.msg || '登录请求失败,请检查网络或账号信息';
|
||||
ElMessage.error(errMsg);
|
||||
return Promise.reject(error);
|
||||
}
|
||||
@@ -70,7 +75,7 @@ service.interceptors.response.use(
|
||||
}
|
||||
|
||||
if (!error.response) {
|
||||
ElMessage.error('网络异常,请检查网络连接后重试');
|
||||
ElMessage.error('网络异常,请检查网络连接后重试');
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
@@ -82,7 +87,79 @@ function handleLoginExpired() {
|
||||
localStorage.removeItem('token');
|
||||
if (router.currentRoute.path !== '/login') {
|
||||
router.push('/login').catch(() => {});
|
||||
ElMessage.error('登录已失效,请重新登录');
|
||||
ElMessage.error('登录已失效,请重新登录');
|
||||
}
|
||||
}
|
||||
|
||||
function handleFileExport(response) {
|
||||
const blob = response.data;
|
||||
const defaultFileName = 'file.xlsx';
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!blob || blob.size === 0) {
|
||||
ElMessage.error('文件大小异常,请稍后重试');
|
||||
reject(new Error('文件内容为空'));
|
||||
return;
|
||||
}
|
||||
const reader = new FileReader();
|
||||
reader.onerror = function() {
|
||||
reject(new Error('文件解析失败'));
|
||||
};
|
||||
reader.onload = function() {
|
||||
try {
|
||||
const res = JSON.parse(reader.result);
|
||||
ElMessage.error(res.msg || '文件下载失败');
|
||||
reject(res);
|
||||
} catch (e) {
|
||||
let fileName = defaultFileName;
|
||||
const disposition = response.headers['content-disposition'];
|
||||
if (disposition) {
|
||||
const match = disposition.match(/filename\*=UTF-8''(.+)/i);
|
||||
if (match && match[1]) {
|
||||
fileName = decodeURIComponent(match[1]);
|
||||
}
|
||||
}
|
||||
if (response.config.downloadFileName) {
|
||||
fileName = typeof response.config.downloadFileName === 'function'
|
||||
? response.config.downloadFileName(response)
|
||||
: response.config.downloadFileName;
|
||||
}
|
||||
|
||||
try {
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const link = document.createElement('a');
|
||||
link.target = '_blank';
|
||||
link.rel = 'noopener noreferrer';
|
||||
link.href = url;
|
||||
link.setAttribute('download', fileName);
|
||||
document.body.appendChild(link);
|
||||
const clickEvent = new MouseEvent('click', {
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
view: window
|
||||
});
|
||||
link.dispatchEvent(clickEvent);
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url);
|
||||
}, 100);
|
||||
resolve(blob);
|
||||
} catch (downloadError) {
|
||||
ElMessage.error('文件下载失败,请手动重试');
|
||||
reject(downloadError);
|
||||
}
|
||||
}
|
||||
};
|
||||
reader.readAsText(blob);
|
||||
});
|
||||
}
|
||||
|
||||
function handleFileExportError(error) {
|
||||
if (error.response?.status === 401) {
|
||||
handleLoginExpired();
|
||||
} else if (error.message.includes('timeout')) {
|
||||
ElMessage.error('文件下载超时,请稍后重试');
|
||||
} else {
|
||||
ElMessage.error('文件下载失败,请稍后重试');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
</template>
|
||||
<template #main>
|
||||
<div class="main-content">
|
||||
<vUser @refresh-role-list="getListData" />
|
||||
<vUser @refresh-role-list="getListData" :formParams="FormValues" />
|
||||
</div>
|
||||
</template>
|
||||
</ResizablePage>
|
||||
@@ -43,14 +43,14 @@ 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 { getHomeModuleList } from '@/api/bizModule'
|
||||
import { getHomeModuleUserSave , getHomeModuleUserDelete } from '@/api/bizModuleUser'
|
||||
import { getHomeModuleListAll, getHomeModuleDelete } from '@/api/bizModule'
|
||||
import { getHomeModuleUserSave } from '@/api/bizModuleUser'
|
||||
|
||||
import vUser from './list.vue'
|
||||
import vRole from './role.vue'
|
||||
|
||||
const FormValues = ref({
|
||||
menuId: ''
|
||||
moduleId: ''
|
||||
});
|
||||
|
||||
const listData = ref([]);
|
||||
@@ -61,7 +61,7 @@ const formComponentRef = ref(null)
|
||||
|
||||
const getListData = async () => {
|
||||
try {
|
||||
const res = await getHomeModuleList();
|
||||
const res = await getHomeModuleListAll();
|
||||
listData.value = res || []
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
@@ -69,7 +69,7 @@ const getListData = async () => {
|
||||
}
|
||||
|
||||
const handleItemClick = (item) => {
|
||||
console.log('选中了:', item)
|
||||
FormValues.value.moduleId = item.moduleId
|
||||
}
|
||||
|
||||
const handleEdit = (item) => {
|
||||
@@ -85,9 +85,9 @@ const handleDelete = (item) => {
|
||||
})
|
||||
.then(async () => {
|
||||
const reqParams = {
|
||||
roleId: item.roleId
|
||||
moduleId: item.moduleId
|
||||
}
|
||||
const res = await getHomeModuleUserDelete(reqParams);
|
||||
const res = await getHomeModuleDelete(reqParams);
|
||||
ElMessage.success(res.msg);
|
||||
getListData();
|
||||
})
|
||||
|
||||
@@ -40,9 +40,6 @@
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">
|
||||
新增
|
||||
</el-button>
|
||||
<el-button type="success" icon="Download" @click="handleExport">
|
||||
导出
|
||||
</el-button>
|
||||
</div>
|
||||
<STable
|
||||
:table-data="tableData"
|
||||
@@ -58,6 +55,8 @@
|
||||
<el-table-column prop="sex" label="性别" />
|
||||
<el-table-column prop="email" label="电子邮箱" width="225" show-overflow-tooltip="true" />
|
||||
<el-table-column prop="phone" label="联系电话" />
|
||||
<el-table-column prop="moduleName" label="模块名称" sortable />
|
||||
<el-table-column prop="moduleCode" label="模块编码" />
|
||||
<el-table-column prop="ustatus" label="状态" min-width="100" align="center">
|
||||
<template #default="scope">
|
||||
<el-tag
|
||||
@@ -86,17 +85,23 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { ref, reactive, onMounted, watch } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Plus, Download, Edit, Delete } from '@element-plus/icons-vue'
|
||||
import { getHomeUserList } from '@/api/bizUser'
|
||||
import { getHomeRoleSave } from '@/api/bizRole'
|
||||
import { getHomeModuleSave, getHomeModuleList } from '@/api/bizModule'
|
||||
|
||||
import CSearch from '@/components/Search/proSearch.vue'
|
||||
import STable from '@/components/Table/proTable.vue'
|
||||
import PDialog from '@/components/Dialog/proDialog.vue'
|
||||
import VForm from './form.vue'
|
||||
|
||||
const props = defineProps({
|
||||
formParams: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
|
||||
const formComponentRef = ref(null)
|
||||
const emit = defineEmits(['refresh-role-list'])
|
||||
|
||||
@@ -124,11 +129,12 @@ async function getDataList() {
|
||||
loading.value = true
|
||||
try {
|
||||
const reqParmas = {
|
||||
... searchForm,
|
||||
pageNum: pagination.pageNum,
|
||||
pageSize: pagination.pageSize,
|
||||
... searchForm,
|
||||
...props.formParams,
|
||||
}
|
||||
const res = await getHomeUserList(reqParmas);
|
||||
const res = await getHomeModuleList(reqParmas);
|
||||
pagination.total = res.total;
|
||||
tableData.value = res.list || [];
|
||||
} catch (error) {
|
||||
@@ -175,10 +181,6 @@ const handleEdit = (row) => {
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
const handleExport = () => {
|
||||
ElMessage.success('开始导出数据...')
|
||||
}
|
||||
|
||||
const handleSizeChange = (val) => {
|
||||
pagination.pageSize = val
|
||||
getDataList()
|
||||
@@ -216,7 +218,7 @@ const handleSave = async () => {
|
||||
const reqParams = {
|
||||
...formData.value
|
||||
}
|
||||
const res = await getHomeRoleSave(reqParams);
|
||||
const res = await getHomeModuleSave(reqParams);
|
||||
ElMessage.success(res.msg)
|
||||
dialogVisible.value = false
|
||||
emit('refresh-role-list')
|
||||
@@ -227,6 +229,16 @@ const handleSave = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
watch(
|
||||
() => props.formParams,
|
||||
() => {
|
||||
getDataList();
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
)
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
getDataList()
|
||||
})
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
>
|
||||
<div class="form-row">
|
||||
<div class="form-col">
|
||||
<el-form-item label="模块编号" prop="moduleId">
|
||||
<el-form-item label="模块标识" prop="moduleId">
|
||||
<el-input
|
||||
v-model="formData.moduleId"
|
||||
placeholder="请输入模块编号"
|
||||
placeholder="请输入模块标识"
|
||||
disabled
|
||||
clearable
|
||||
/>
|
||||
@@ -27,6 +27,64 @@
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-col">
|
||||
<el-form-item label="模块编号" prop="moduleCode">
|
||||
<el-input
|
||||
v-model="formData.moduleCode"
|
||||
placeholder="请输入模块编号"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="form-col">
|
||||
<el-form-item label="路由地址" prop="path">
|
||||
<el-input
|
||||
v-model="formData.path"
|
||||
placeholder="请输入路由地址"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-col">
|
||||
<el-form-item label="大屏标题" prop="titleName">
|
||||
<el-input
|
||||
v-model="formData.titleName"
|
||||
placeholder="请输入大屏标题"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="form-col">
|
||||
<el-form-item label="模块状态" prop="ustatus">
|
||||
<el-select
|
||||
v-model="formData.ustatus"
|
||||
placeholder="请选择模块状态"
|
||||
clearable
|
||||
>
|
||||
<el-option label="停用" value="0" />
|
||||
<el-option label="在用" value="1" />
|
||||
<el-option label="锁定" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-col">
|
||||
<el-form-item label="模块描述" prop="remark">
|
||||
<el-input
|
||||
v-model="formData.remark"
|
||||
placeholder="请输入模块描述"
|
||||
type="textarea"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row transfer-row">
|
||||
<div class="form-col transfer-col">
|
||||
<el-form-item label="权限列表" prop="userIds">
|
||||
@@ -58,6 +116,11 @@ const props = defineProps({
|
||||
default: () => ({
|
||||
moduleId: '',
|
||||
moduleName: '',
|
||||
moduleCode: '',
|
||||
path: '',
|
||||
titleName: '',
|
||||
remark: '',
|
||||
ustatus: '',
|
||||
userIds: []
|
||||
})
|
||||
},
|
||||
@@ -72,6 +135,10 @@ const transferData = ref([])
|
||||
|
||||
const formRules = {
|
||||
moduleName: [ { required: true, message: '请输入模块名称', trigger: 'blur' } ],
|
||||
moduleCode: [ { required: true, message: '请输入模块编号', trigger: 'blur' } ],
|
||||
path: [ { required: true, message: '请输入路由地址', trigger: 'blur' } ],
|
||||
titleName: [ { required: true, message: '请输入大屏标题', trigger: 'blur' } ],
|
||||
ustatus: [ { required: true, message: '请选择模块状态', trigger: 'blur' } ],
|
||||
userIds: [
|
||||
{ required: true, message: '请至少选择一个用户', trigger: 'change' }
|
||||
]
|
||||
|
||||
8
screen-vue/src/views/screen/Sys/index.vue
Normal file
8
screen-vue/src/views/screen/Sys/index.vue
Normal file
@@ -0,0 +1,8 @@
|
||||
<template>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
@@ -39,9 +39,6 @@
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">
|
||||
新增
|
||||
</el-button>
|
||||
<el-button type="success" icon="Download" @click="handleExport">
|
||||
导出
|
||||
</el-button>
|
||||
</div>
|
||||
<TreeTable
|
||||
:table-data="tableData"
|
||||
@@ -211,12 +208,6 @@ const handleDelete = async (row) => {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
const handleExport = () => {
|
||||
console.log('导出菜单数据');
|
||||
}
|
||||
|
||||
const handleDialogClose = () => {
|
||||
formData.value = {}
|
||||
isEdit.value = false
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
</template>
|
||||
<template #main>
|
||||
<div class="main-content">
|
||||
<vUser @refresh-role-list="getListData" />
|
||||
<vUser @refresh-role-list="getListData" :formParams="FormValues" />
|
||||
</div>
|
||||
</template>
|
||||
</ResizablePage>
|
||||
@@ -48,7 +48,7 @@ import vUser from './list.vue'
|
||||
import vRole from './role.vue'
|
||||
|
||||
const FormValues = ref({
|
||||
menuId: ''
|
||||
roleId: ''
|
||||
});
|
||||
|
||||
const listData = ref([]);
|
||||
@@ -67,7 +67,7 @@ const getListData = async () => {
|
||||
}
|
||||
|
||||
const handleItemClick = (item) => {
|
||||
console.log('选中了:', item)
|
||||
FormValues.value.roleId = item.roleId
|
||||
}
|
||||
|
||||
const handleEdit = (item) => {
|
||||
|
||||
@@ -40,9 +40,6 @@
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">
|
||||
新增
|
||||
</el-button>
|
||||
<el-button type="success" icon="Download" @click="handleExport">
|
||||
导出
|
||||
</el-button>
|
||||
</div>
|
||||
<STable
|
||||
:table-data="tableData"
|
||||
@@ -86,17 +83,23 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { ref, reactive, onMounted, watch } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Plus, Download, Edit, Delete } from '@element-plus/icons-vue'
|
||||
import { getHomeUserList } from '@/api/bizUser'
|
||||
import { getHomeRoleSave } from '@/api/bizRole'
|
||||
import { getHomeRoleSave, getHomeRoleUserList } from '@/api/bizRole'
|
||||
|
||||
import CSearch from '@/components/Search/proSearch.vue'
|
||||
import STable from '@/components/Table/proTable.vue'
|
||||
import PDialog from '@/components/Dialog/proDialog.vue'
|
||||
import VForm from './form.vue'
|
||||
|
||||
const props = defineProps({
|
||||
formParams: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
|
||||
const formComponentRef = ref(null)
|
||||
const emit = defineEmits(['refresh-role-list'])
|
||||
|
||||
@@ -124,11 +127,12 @@ async function getDataList() {
|
||||
loading.value = true
|
||||
try {
|
||||
const reqParmas = {
|
||||
... searchForm,
|
||||
pageNum: pagination.pageNum,
|
||||
pageSize: pagination.pageSize,
|
||||
... searchForm,
|
||||
...props.formParams,
|
||||
}
|
||||
const res = await getHomeUserList(reqParmas);
|
||||
const res = await getHomeRoleUserList(reqParmas);
|
||||
pagination.total = res.total;
|
||||
tableData.value = res.list || [];
|
||||
} catch (error) {
|
||||
@@ -175,10 +179,6 @@ const handleEdit = (row) => {
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
const handleExport = () => {
|
||||
ElMessage.success('开始导出数据...')
|
||||
}
|
||||
|
||||
const handleSizeChange = (val) => {
|
||||
pagination.pageSize = val
|
||||
getDataList()
|
||||
@@ -227,6 +227,14 @@ const handleSave = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
() => props.formParams,
|
||||
() => {
|
||||
getDataList();
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
)
|
||||
|
||||
onMounted(() => {
|
||||
getDataList()
|
||||
})
|
||||
|
||||
@@ -40,9 +40,6 @@
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">
|
||||
新增
|
||||
</el-button>
|
||||
<el-button type="success" icon="Download" @click="handleExport">
|
||||
导出
|
||||
</el-button>
|
||||
</div>
|
||||
<STable
|
||||
:table-data="tableData"
|
||||
@@ -139,9 +136,9 @@ async function getDataList() {
|
||||
loading.value = true
|
||||
try {
|
||||
const reqParams = {
|
||||
... searchForm,
|
||||
pageNum: pagination.pageNum,
|
||||
pageSize: pagination.pageSize,
|
||||
... searchForm,
|
||||
}
|
||||
const res = await getHomeUserList(reqParams);
|
||||
pagination.total = res.total;
|
||||
@@ -192,10 +189,6 @@ const handleEdit = (row) => {
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
const handleExport = () => {
|
||||
ElMessage.success('开始导出数据...')
|
||||
}
|
||||
|
||||
const handleDelete = async (row) => {
|
||||
ElMessageBox.confirm('确定要删除该条数据吗?', '删除确认', {
|
||||
type: 'warning',
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.mini.mybigscreen.Model.JoinDao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class ModuleLeftUser implements Serializable {
|
||||
|
||||
private LocalDateTime createTime;
|
||||
private String userId;
|
||||
private String userName;
|
||||
private String password;
|
||||
private String uname;
|
||||
|
||||
private Integer sex;
|
||||
private String email;
|
||||
|
||||
private String phone;
|
||||
private String roleId;
|
||||
|
||||
private String ustatus;
|
||||
|
||||
private Integer loginCount;
|
||||
private String lastLoginIp;
|
||||
|
||||
|
||||
private String moduleName;
|
||||
|
||||
private String moduleCode;
|
||||
}
|
||||
@@ -10,5 +10,10 @@ public class ModuleUser implements Serializable {
|
||||
|
||||
private String moduleId;
|
||||
private String moduleName;
|
||||
private String moduleCode;
|
||||
private String path;
|
||||
private String titleName;
|
||||
private String remark;
|
||||
private String ustatus;
|
||||
private List<String> userIds;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,22 @@
|
||||
package com.mini.mybigscreen.biz.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.mini.mybigscreen.Model.JoinDao.ModuleLeftUser;
|
||||
import com.mini.mybigscreen.Model.Message;
|
||||
import com.mini.mybigscreen.Model.PageResult;
|
||||
import com.mini.mybigscreen.Model.Result;
|
||||
import com.mini.mybigscreen.biz.domain.HomeModule;
|
||||
import com.mini.mybigscreen.biz.domain.HomeModuleUser;
|
||||
import com.mini.mybigscreen.biz.domain.HomeRole;
|
||||
import com.mini.mybigscreen.biz.domain.HomeUser;
|
||||
import com.mini.mybigscreen.biz.service.HomeModuleService;
|
||||
import com.mini.mybigscreen.utils.PageUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -24,19 +33,44 @@ public class HomeModuleController {
|
||||
@Resource
|
||||
private HomeModuleService moduleService;
|
||||
|
||||
@Resource
|
||||
private MPJBaseMapper homeUserMapper;
|
||||
|
||||
|
||||
@GetMapping("list")
|
||||
public Result<?> getList() {
|
||||
public Result<?> getList(Integer pageNum, Integer pageSize,
|
||||
String moduleId, String userName, String uname, String ustatus) {
|
||||
MPJLambdaWrapper<ModuleLeftUser> wrapper = new MPJLambdaWrapper<ModuleLeftUser>()
|
||||
.selectAll(HomeUser.class)
|
||||
.select(HomeModule::getModuleName, HomeModule::getModuleCode)
|
||||
.leftJoin(HomeModuleUser.class, HomeModuleUser::getUserId, HomeUser::getUserId)
|
||||
.leftJoin(HomeModule.class, HomeModule::getModuleId, HomeModuleUser::getModuleId)
|
||||
.like(StrUtil.isNotBlank(uname), HomeUser::getUname, uname)
|
||||
.eq(StrUtil.isNotBlank(ustatus), HomeUser::getUstatus, ustatus)
|
||||
.eq(StrUtil.isNotBlank(userName), HomeUser::getUserName, userName)
|
||||
.eq(StrUtil.isNotBlank(moduleId), HomeModuleUser::getModuleId, moduleId)
|
||||
.orderByDesc(HomeUser::getCreateTime);
|
||||
List<ModuleLeftUser> list = homeUserMapper.selectJoinList(ModuleLeftUser.class, wrapper);
|
||||
PageUtil<?> util = new PageUtil<>(pageNum, pageSize, list);
|
||||
PageResult<?> result = new PageResult<>(util.OkData(), pageNum, pageSize, list.size());
|
||||
return Result.success(result);
|
||||
}
|
||||
|
||||
@GetMapping("listAll")
|
||||
public Result<?> getListAll() {
|
||||
return Result.success(moduleService.list());
|
||||
}
|
||||
|
||||
public Result<Message> save() {
|
||||
@PostMapping("save")
|
||||
public Result<Message> save(@RequestBody HomeModule homeModule) {
|
||||
moduleService.save(homeModule);
|
||||
return Result.success(new Message("数据新增成功", 200));
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("delete")
|
||||
public Result<Message> delete(String moduleId) {
|
||||
System.out.println(moduleId);
|
||||
moduleService.removeById(moduleId);
|
||||
return Result.success(new Message("数据删除成功", 200));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,10 @@ import com.mini.mybigscreen.Model.ModuleUser;
|
||||
import com.mini.mybigscreen.Model.Result;
|
||||
import com.mini.mybigscreen.biz.domain.HomeModule;
|
||||
import com.mini.mybigscreen.biz.domain.HomeModuleUser;
|
||||
import com.mini.mybigscreen.biz.domain.HomeRoleMenu;
|
||||
import com.mini.mybigscreen.biz.domain.HomeUser;
|
||||
import com.mini.mybigscreen.biz.mapper.HomeModuleMapper;
|
||||
import com.mini.mybigscreen.biz.service.HomeModuleService;
|
||||
import com.mini.mybigscreen.biz.service.HomeModuleUserService;
|
||||
import com.mini.mybigscreen.biz.service.HomeUserService;
|
||||
import jakarta.annotation.Resource;
|
||||
@@ -17,6 +19,7 @@ import jakarta.servlet.http.HttpSession;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -34,6 +37,10 @@ public class HomeModuleUserController {
|
||||
@Resource
|
||||
private HomeUserService userService;
|
||||
|
||||
|
||||
@Resource
|
||||
private HomeModuleService moduleService;
|
||||
|
||||
@Resource
|
||||
private HomeModuleMapper homeModuleMapper;
|
||||
|
||||
@@ -73,7 +80,27 @@ public class HomeModuleUserController {
|
||||
|
||||
@PostMapping("save")
|
||||
public Result<Message> save(@RequestBody ModuleUser moduleUser) {
|
||||
return Result.success(new Message("数据新增成功", 200));
|
||||
HomeModule module = moduleService.getById(moduleUser.getModuleId());
|
||||
module.setModuleName(moduleUser.getModuleName());
|
||||
module.setModuleCode(moduleUser.getModuleCode());
|
||||
module.setPath(moduleUser.getPath());
|
||||
module.setTitleName(moduleUser.getTitleName());
|
||||
module.setRemark(moduleUser.getRemark());
|
||||
module.setUstatus(moduleUser.getUstatus());
|
||||
moduleService.updateById(module);
|
||||
moduleUserService.remove(new LambdaQueryWrapper<HomeModuleUser>()
|
||||
.eq(HomeModuleUser::getModuleId, moduleUser.getModuleId()));
|
||||
List<HomeModuleUser> newModuleUsers = moduleUser.getUserIds().stream()
|
||||
.map(userId -> {
|
||||
HomeModuleUser homeModuleUser = new HomeModuleUser();
|
||||
homeModuleUser.setModuleId(moduleUser.getModuleId());
|
||||
homeModuleUser.setUserId(userId);
|
||||
homeModuleUser.setUstatus("1");
|
||||
return homeModuleUser;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
moduleUserService.saveBatch(newModuleUsers);
|
||||
return Result.success(new Message("数据授权成功", 200));
|
||||
}
|
||||
|
||||
@PostMapping("delete")
|
||||
|
||||
@@ -2,14 +2,18 @@ package com.mini.mybigscreen.biz.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.mini.mybigscreen.Model.Message;
|
||||
import com.mini.mybigscreen.Model.PageResult;
|
||||
import com.mini.mybigscreen.Model.Result;
|
||||
import com.mini.mybigscreen.Model.RoleAssignPerm;
|
||||
import com.mini.mybigscreen.biz.domain.ErpCategory;
|
||||
import com.mini.mybigscreen.biz.domain.HomeRole;
|
||||
import com.mini.mybigscreen.biz.domain.HomeRoleMenu;
|
||||
import com.mini.mybigscreen.biz.domain.HomeUser;
|
||||
import com.mini.mybigscreen.biz.service.HomeRoleMenuService;
|
||||
import com.mini.mybigscreen.biz.service.HomeRoleService;
|
||||
import com.mini.mybigscreen.utils.PageUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@@ -34,12 +38,35 @@ public class HomeRoleController {
|
||||
@Resource
|
||||
private HomeRoleService roleService;
|
||||
|
||||
@Resource
|
||||
private MPJBaseMapper<HomeUser> homeUserMapper;
|
||||
|
||||
|
||||
@GetMapping("list")
|
||||
public Result<?> getList() {
|
||||
return Result.success(roleService.list());
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("userList")
|
||||
public Result<?> getUserList(Integer pageNum, Integer pageSize,
|
||||
String roleId, String userName, String uname, String ustatus) {
|
||||
MPJLambdaWrapper<HomeUser> wrapper = new MPJLambdaWrapper<HomeUser>()
|
||||
.selectAll(HomeUser.class)
|
||||
.select(HomeRole::getRoleName)
|
||||
.leftJoin(HomeRole.class, HomeRole::getRoleId, HomeUser::getRoleId)
|
||||
.like(StrUtil.isNotBlank(uname), HomeUser::getUname, uname)
|
||||
.eq(StrUtil.isNotBlank(ustatus), HomeUser::getUstatus, ustatus)
|
||||
.eq(StrUtil.isNotBlank(userName), HomeUser::getUserName, userName)
|
||||
.eq(StrUtil.isNotBlank(roleId), HomeUser::getRoleId, roleId)
|
||||
.orderByDesc(HomeUser::getCreateTime);
|
||||
List<HomeUser> list = homeUserMapper.selectList(wrapper);
|
||||
PageUtil<?> util = new PageUtil<>(pageNum, pageSize, list);
|
||||
PageResult<?> result = new PageResult<>(util.OkData(), pageNum, pageSize, list.size());
|
||||
return Result.success(result);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 角色授权
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.mini.mybigscreen.biz.controller;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.poi.excel.BigExcelWriter;
|
||||
import cn.hutool.poi.excel.ExcelUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
@@ -11,9 +14,13 @@ import com.mini.mybigscreen.biz.domain.HomeUser;
|
||||
import com.mini.mybigscreen.biz.service.HomeUserService;
|
||||
import com.mini.mybigscreen.utils.PageUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.io.OutputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -52,7 +59,6 @@ public class HomeUserController {
|
||||
return Result.success(result);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("save")
|
||||
public Result<Message> save(@RequestBody HomeUser homeUser) {
|
||||
boolean success = homeUser.getIsEdit()
|
||||
|
||||
@@ -42,5 +42,5 @@ public class HomeModuleUser extends BaseEntity implements Serializable {
|
||||
private String moduleId;
|
||||
|
||||
@TableField("ustatus")
|
||||
private Integer ustatus;
|
||||
private String ustatus;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user