Browse Source

BUG修复

zhangchong 2 năm trước cách đây
mục cha
commit
4bf551022e

+ 3 - 1
src/router/backEnd.ts

@@ -75,7 +75,7 @@ export async function initBackEndControlRoutes() {
 	if (window.nextLoading === undefined) NextLoading.start();
 	// 无 token 停止执行下一步
 	if (!Session.get('token')) return false;
-	
+
 	let resRouter = null;
 	if (Local.get('requestOldRoutes')) { //获取到缓存
 		resRouter = Local.get('requestOldRoutes');
@@ -171,7 +171,9 @@ export function getBackEndControlRoutes() {
  * @description 路径:/src/views/system/menu/component/addMenu.vue
  */
 export function setBackEndControlRefreshRoutes() {
+	Local.remove('requestOldRoutes')
 	getBackEndControlRoutes();
+	window.location.reload();
 }
 
 /**

+ 0 - 1
src/views/system/organize/component/editOrg.vue

@@ -143,7 +143,6 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
 			console.log('error submit!', fields);
 		}
 	});
-	// setBackEndControlRefreshRoutes() // 刷新菜单,未进行后端接口测试
 };
 // 暴露变量
 defineExpose({

+ 2 - 32
src/views/system/roles/index.vue

@@ -24,13 +24,9 @@
 				<p class="table-title">信息列表</p>
 				<div>
 					<el-button type="primary" @click="onOpenAddRole" v-waves v-auth="'100201'"> <SvgIcon name="ele-Plus" class="mr5" />新增 </el-button>
-					<el-button type="primary" v-waves @click="onImportTable" :disabled="!state.multipleSelection.length">
-						<SvgIcon name="iconfont icon-daochu" class="mr5" />导出
-					</el-button>
 				</div>
 			</div>
-			<el-table :data="state.tableData.data" v-loading="state.loading" row-key="id" @selection-change="handleSelectionChange">
-				<el-table-column type="selection" width="55" :reserve-selection="true" />
+			<el-table :data="state.tableData.data" v-loading="state.loading" row-key="id">
 				<el-table-column type="index" width="60" label="序号" />
 				<el-table-column prop="displayName" label="角色名称" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="name" label="角色编码" show-overflow-tooltip></el-table-column>
@@ -74,13 +70,9 @@
 import { defineAsyncComponent, reactive, onMounted, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import type { FormInstance } from 'element-plus';
-import { useRouter,useRoute } from 'vue-router';
-import { storeToRefs } from 'pinia';
-import { useThemeConfig } from '/@/stores/themeConfig';
+import { useRouter } from 'vue-router';
 import { throttle } from '/@/utils/tools';
-import { formatDate } from '/@/utils/formatTime';
 import { getRoleListPaged, delRole } from '/@/api/system/roles';
-import table2excel from 'js-table2excel';
 // 引入组件
 const AddRole = defineAsyncComponent(() => import('/@/views/system/roles/component/addRole.vue'));
 const EditRole = defineAsyncComponent(() => import('/@/views/system/roles/component/editRole.vue'));
@@ -93,16 +85,12 @@ const editRoleRef = ref();
 const PermissionRoleRef = ref();
 const UserListRef = ref();
 const ruleFormRef = ref<FormInstance>();
-const storesThemeConfig = useThemeConfig();
-const { themeConfig } = storeToRefs(storesThemeConfig);
-const route = useRoute();
 const state = reactive<any>({
 	tableData: {
 		data: [],
 		total: 0,
 	},
 	loading: false,
-	multipleSelection: [],
 	IncludeDeletedList: [
 		{
 			label: '正常',
@@ -173,10 +161,6 @@ const onDataAuth = (row: any) => {
 		},
 	});
 };
-// 表格多选
-const handleSelectionChange = (val: any) => {
-	state.multipleSelection = val;
-};
 // 删除角色
 const onRowDel = (row: any) => {
 	ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.displayName}”,是否继续?`, '提示', {
@@ -194,20 +178,6 @@ const onRowDel = (row: any) => {
 		})
 		.catch(() => {});
 };
-// 导出表格
-const onImportTable = () => {
-	const tabeHeader = [
-		{ key: 'displayName', colWidth: '', title: '角色名称', type: 'text', isCheck: true },
-		{ key: 'name', colWidth: '', title: '角色编码', type: 'text', isCheck: true },
-		{ key: 'description', colWidth: '', title: '角色说明', type: 'text', isCheck: true },
-		{ key: 'state', colWidth: '', title: '状态', type: 'text', isCheck: true },
-	];
-	table2excel(
-		tabeHeader,
-		state.multipleSelection,
-		`${themeConfig.value.globalTitle}-${route.meta.title} ${formatDate(new Date(), 'YYYY-mm-dd HH-MM')}`
-	);
-};
 // 页面加载时
 onMounted(() => {
 	handleQuery();

+ 33 - 27
src/views/system/user/component/addUser.vue

@@ -2,7 +2,7 @@
 	<div class="system-add-user-container">
 		<el-dialog v-model="state.isShowDialog" width="769px" draggable title="新增用户" ref="dialogRef">
 			<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
-				<el-row :gutter="35">
+				<el-row :gutter="10">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-divider content-position="left"><b class="formTitle">基本信息</b></el-divider>
 					</el-col>
@@ -28,7 +28,7 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="所属部门" prop="orgId" :rules="[{ required: true, message: '请选择所属部门', trigger: 'change' }]">
 							<el-cascader
 								:options="state.orgData"
@@ -60,12 +60,25 @@
 							<el-input v-model="state.ruleForm.email" placeholder="请输入邮箱" clearable></el-input>
 						</el-form-item>
 					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="工号" prop="staffNo" :rules="[{ required: false, message: '请输入工号', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.staffNo" placeholder="请输入工号" clearable></el-input>
+						</el-form-item>
+					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-divider content-position="left"><b class="formTitle">角色配置</b></el-divider>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="工号" prop="staffNo" :rules="[{ required: true, message: '请输入工号', trigger: 'blur' }]">
-							<el-input v-model="state.ruleForm.staffNo" placeholder="请输入工号" clearable></el-input>
+					<el-col :xs="24" :sm="2124" :md="12" :lg="12" :xl="12">
+						<el-form-item label="角色" prop="roleIds" :rules="[{ required: false, message: '请选择角色', trigger: 'change' }]">
+							<el-select-v2
+								v-model="state.ruleForm.roleIds"
+								filterable
+								multiple
+								:options="state.roleOptions"
+								class="w100"
+								placeholder="请选择角色"
+								clearable
+							/>
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -85,32 +98,13 @@ import { reactive, ref } from 'vue';
 import { ElMessage } from 'element-plus';
 import { throttle } from '/@/utils/tools';
 import { auth } from '/@/utils/authFunction';
-import { addUser, getcanuseorg, getBaseData } from '/@/api/system/user';
+import { addUser, getcanuseorg, getBaseData, getRoles } from '/@/api/system/user';
 import { getTelsList } from '/@/api/device/tels';
-// 定义接口来定义对象的类型
-interface UserState {
-	isShowDialog: boolean;
-	ruleForm: {
-		phoneNo: string; // 手机号
-		name: string; // 姓名
-		userName: string; // 用户昵称
-		gender: string | number; //性别
-		orgId: string; // 组织id
-		orgCode: string; //组织code
-		staffNo: string; //工号
-		defaultTelNo: string; //默认分机
-		email: string; // 邮箱
-	};
-	orgData: Array<any>; //可用组织
-	telsList: Array<any>; // 所有分机
-	genderList: Array<any>; //性别列表
-	trasform: string; //性别列表
-}
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
 // 定义变量内容
-const state = reactive<UserState>({
+const state = reactive<any>({
 	isShowDialog: false,
 	ruleForm: {
 		phoneNo: '', // 手机号
@@ -122,11 +116,12 @@ const state = reactive<UserState>({
 		staffNo: '', //工号
 		defaultTelNo: '', //默认分机
 		email: '', //邮箱
+		roleIds: <any>[], // 角色
 	},
 	orgData: [], //可用组织
 	telsList: [], // 所有分机
 	genderList: [], // 性别列表
-	trasform: 'translate(0px, 0px)',
+	roleOptions: [], // 所有角色
 });
 let loading = ref<boolean>(false);
 // 打开弹窗
@@ -137,6 +132,7 @@ const openDialog = () => {
 	getOrgListFn();
 	getTelsListFn();
 	getBaseDataFn();
+	getRolesFn();
 	state.isShowDialog = true;
 };
 // 关闭弹窗
@@ -174,6 +170,16 @@ const getBaseDataFn = () => {
 		state.genderList = res?.result?.genderOptions ?? [];
 	});
 };
+// 获取角色
+const getRolesFn = () => {
+	getRoles({ PageIndex: 1, PageSize: 999 }).then((res: any) => {
+		state.roleOptions = res.result?.items ?? [];
+		state.roleOptions = state.roleOptions.map((item: any) => ({
+			value: item.id,
+			label: item.displayName,
+		}));
+	});
+};
 // 新增
 const onSubmit = throttle(() => {
 	ruleFormRef.value.validate((valid: boolean) => {

+ 36 - 27
src/views/system/user/component/editUser.vue

@@ -2,7 +2,7 @@
 	<div class="system-edit-user-container">
 		<el-dialog v-model="state.isShowDialog" width="769px" draggable title="修改用户">
 			<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
-				<el-row :gutter="35">
+				<el-row :gutter="10">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-divider content-position="left"><b class="formTitle">基本信息</b></el-divider>
 					</el-col>
@@ -28,7 +28,7 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="所属部门" prop="orgId" :rules="[{ required: true, message: '请选择所属部门', trigger: 'change' }]">
 							<el-cascader
 								:options="state.OrgData"
@@ -60,12 +60,25 @@
 							<el-input v-model="state.ruleForm.email" placeholder="请输入邮箱" clearable></el-input>
 						</el-form-item>
 					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="工号" prop="staffNo" :rules="[{ required: false, message: '请输入工号', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.staffNo" placeholder="请输入工号" clearable></el-input>
+						</el-form-item>
+					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-divider content-position="left"><b class="formTitle">角色配置</b></el-divider>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="工号" prop="staffNo" :rules="[{ required: true, message: '请输入工号', trigger: 'blur' }]">
-							<el-input v-model="state.ruleForm.staffNo" placeholder="请输入工号" clearable></el-input>
+					<el-col :xs="24" :sm="2124" :md="12" :lg="12" :xl="12">
+						<el-form-item label="角色" prop="roleIds" :rules="[{ required: false, message: '请选择角色', trigger: 'change' }]">
+							<el-select-v2
+								v-model="state.ruleForm.roleIds"
+								filterable
+								multiple
+								:options="state.roleOptions"
+								class="w100"
+								placeholder="请选择角色"
+								clearable
+							/>
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -85,32 +98,14 @@ import { reactive, ref } from 'vue';
 import type { FormInstance } from 'element-plus';
 import { ElMessage } from 'element-plus';
 import { throttle } from '/@/utils/tools';
-import { updateUser, getcanuseorg, getBaseData } from '/@/api/system/user';
+import { updateUser, getcanuseorg, getBaseData, getRoles } from '/@/api/system/user';
 import { auth } from '/@/utils/authFunction';
 import { getTelsList } from '/@/api/device/tels';
-// 定义接口来定义对象的类型
-interface UserState {
-	isShowDialog: boolean;
-	ruleForm: {
-		phoneNo: string; // 手机号
-		name: string; // 姓名
-		userName: string; // 用户昵称
-		gender: string | number; //性别
-		orgId: string; // 组织id
-		orgCode: string; //组织code
-		staffNo: string; //工号
-		defaultTelNo: string; //默认分机
-		email: string; // 邮箱
-	};
-	OrgData: Array<any>; //可用组织
-	telsList: Array<any>; // 所有分机
-	genderList: Array<any>; //性别列表
-}
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
 
 // 定义变量内容
-const state = reactive<UserState>({
+const state = reactive<any>({
 	isShowDialog: false,
 	ruleForm: {
 		phoneNo: '', // 手机号
@@ -122,10 +117,12 @@ const state = reactive<UserState>({
 		staffNo: '', //工号
 		defaultTelNo: '', //默认分机
 		email: '', //邮箱
+		roleIds: <any>[], // 角色
 	},
 	OrgData: [], //可用组织
 	telsList: [], // 所有分机
 	genderList: [], // 性别列表
+	roleOptions: [], // 角色列表
 });
 const ruleFormRef = ref<FormInstance>();
 let loading = ref<boolean>(false);
@@ -134,9 +131,13 @@ const openDialog = (row: any) => {
 	ruleFormRef.value?.clearValidate();
 	ruleFormRef.value?.resetFields();
 	state.ruleForm = JSON.parse(JSON.stringify(row));
+	state.ruleForm.roleIds = state.ruleForm.roles.map((v:any)=>{
+		return v.id
+	})
 	getOrgListFn();
 	getTelsListFn();
 	getBaseDataFn();
+	getRolesFn();
 	state.isShowDialog = true;
 };
 // 关闭弹窗
@@ -174,6 +175,16 @@ const getBaseDataFn = () => {
 		state.genderList = res?.result?.genderOptions ?? [];
 	});
 };
+// 获取角色
+const getRolesFn = () => {
+	getRoles({ PageIndex: 1, PageSize: 999 }).then((res: any) => {
+		state.roleOptions = res.result?.items ?? [];
+		state.roleOptions = state.roleOptions.map((item: any) => ({
+			value: item.id,
+			label: item.displayName,
+		}));
+	});
+};
 // 新增
 const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
@@ -195,8 +206,6 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 					loading.value = false;
 					closeDialog();
 				});
-		} else {
-			// console.log('error submit!', fields)
 		}
 	});
 }, 1000);

+ 12 - 54
src/views/system/user/index.vue

@@ -34,8 +34,8 @@
 					<el-scrollbar class="pr10" ref="rightScrollRef">
 						<div class="flex-column">
 							<el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
-								<el-form-item label="用户名" prop="Keyword">
-									<el-input v-model="state.queryParams.Keyword" placeholder="请输入用户名" clearable @keyup.enter="handleQuery" />
+								<el-form-item label="关键字" prop="Keyword">
+									<el-input v-model="state.queryParams.Keyword" placeholder="姓名/电话号码" clearable @keyup.enter="handleQuery" />
 								</el-form-item>
 								<el-form-item label="角色" prop="Role">
 									<el-select-v2 v-model="state.queryParams.Role" filterable :options="state.options" placeholder="请选择角色" clearable />
@@ -51,34 +51,29 @@
 								<p class="table-title"></p>
 								<div>
 									<el-button type="primary" @click="onOpenAddUser" v-auth="'100102'"> <SvgIcon name="ele-Plus" class="mr5" />新增 </el-button>
-									<el-button type="primary" @click="onImportTable" :disabled="!state.multipleSelection.length">
-										<SvgIcon name="iconfont icon-daochu" class="mr5" />导出
-									</el-button>
 								</div>
 							</div>
 							<!-- 表格 -->
-							<el-table :data="state.tableData" v-loading="state.tableLoading" row-key="id" @selection-change="handleSelectionChange">
-								<el-table-column type="selection" width="55" :reserve-selection="true" />
+							<el-table :data="state.tableData" v-loading="state.tableLoading" row-key="id">
 								<el-table-column type="index" width="60" label="序号" />
-								<el-table-column prop="name" label="用户名" show-overflow-tooltip width="150"></el-table-column>
+								<el-table-column prop="name" label="名" show-overflow-tooltip width="150"></el-table-column>
 								<el-table-column prop="userName" label="账号" show-overflow-tooltip width="150"></el-table-column>
 								<el-table-column prop="orgName" label="所属部门" show-overflow-tooltip width="190"></el-table-column>
-								<el-table-column prop="roles" label="角色" show-overflow-tooltip width="300"></el-table-column>
+								<el-table-column prop="roleNames" label="角色" show-overflow-tooltip width="300"></el-table-column>
 								<el-table-column prop="phoneNo" label="电话号码" show-overflow-tooltip width="130"></el-table-column>
-								<el-table-column prop="staffNo" label="工号" show-overflow-tooltip width="80"></el-table-column>
+								<el-table-column prop="staffNo" label="工号" show-overflow-tooltip width="120"></el-table-column>
 								<el-table-column prop="genderText" label="性别" show-overflow-tooltip width="80"></el-table-column>
 								<el-table-column prop="creationTime" label="更新时间" show-overflow-tooltip width="170">
 									<template #default="scope">
 										<span>{{ formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
 									</template>
 								</el-table-column>
-								<el-table-column prop="state" label="状态" show-overflow-tooltip width="60"></el-table-column>
-								<el-table-column label="操作" width="260" fixed="right" align="center">
-									<template #default="scope">
-										<el-button link type="primary" @click="onOpenEditUser(scope.row)" v-auth="'100103'" title="修改"> 修改 </el-button>
-										<el-button link type="success" @click="onSetRole(scope.row)" v-auth="'100105'" title="设置角色"> 设置角色 </el-button>
-										<el-button link type="warning" @click="onRestPwd(scope.row)" title="重置密码"> 重置密码 </el-button>
-										<el-button link type="danger" @click="onRowDel(scope.row)" v-auth="'100104'" title="删除"> 删除 </el-button>
+								<el-table-column prop="state" label="状态" show-overflow-tooltip width="80"></el-table-column>
+								<el-table-column label="操作" width="180" fixed="right" align="center">
+									<template #default="{row}">
+										<el-button link type="primary" @click="onOpenEditUser(row)" v-auth="'100103'" title="修改" v-if="!row.isDeleted"> 修改 </el-button>
+										<el-button link type="warning" @click="onRestPwd(row)" title="重置密码" v-if="!row.isDeleted"> 重置密码 </el-button>
+										<el-button link type="danger" @click="onRowDel(row)" v-auth="'100104'" title="删除" v-if="!row.isDeleted"> 删除 </el-button>
 									</template>
 								</el-table-column>
 								<template #empty>
@@ -100,7 +95,6 @@
 
 		<AddUer ref="addUserRef" @updateList="handleQuery" />
 		<EditUser ref="editUserRef" @updateList="handleQuery" />
-		<SetRole ref="setRoleRef" @updateList="handleQuery" />
 	</div>
 </template>
 
@@ -108,19 +102,14 @@
 import { defineAsyncComponent, ref, reactive, onMounted, watch, onActivated } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import type { FormInstance } from 'element-plus';
-import table2excel from 'js-table2excel';
 import { formatDate } from '/@/utils/formatTime';
 import { throttle } from '/@/utils/tools';
-import { useRoute } from 'vue-router';
-import { storeToRefs } from 'pinia';
-import { useThemeConfig } from '/@/stores/themeConfig';
 import { delUser, getUserListPaged, restPwd, getRoles } from '/@/api/system/user';
 import { getOrgList } from '/@/api/system/organize';
 
 // 引入组件
 const AddUer = defineAsyncComponent(() => import('/@/views/system/user/component/addUser.vue'));
 const EditUser = defineAsyncComponent(() => import('/@/views/system/user/component/editUser.vue'));
-const SetRole = defineAsyncComponent(() => import('/@/views/system/user/component/setRole.vue'));
 
 // 定义变量内容
 const state = reactive<any>({
@@ -135,7 +124,6 @@ const state = reactive<any>({
 	total: 0,
 	loading: false,
 	tableLoading: false,
-	multipleSelection: [],
 	orgData: [],
 	options: [],
 	defaultExpandedKeys: [],
@@ -143,11 +131,7 @@ const state = reactive<any>({
 const ruleFormRef = ref<FormInstance>(); //表单ref
 const addUserRef = ref(); //新增用户
 const editUserRef = ref(); //修改用户信息
-const setRoleRef = ref(); //设置角色
 const rightScrollRef = ref();
-const storesThemeConfig = useThemeConfig();
-const { themeConfig } = storeToRefs(storesThemeConfig);
-const route = useRoute();
 
 const filterOrg = ref('');
 const treRef = ref();
@@ -215,14 +199,6 @@ const handleNodeClick = (data: any) => {
 const onOpenAddUser = () => {
 	addUserRef.value.openDialog();
 };
-// 打开设置用户角色弹窗
-const onSetRole = (row: any) => {
-	setRoleRef.value.openDialog(row);
-};
-// 表格多选
-const handleSelectionChange = (val: any) => {
-	state.multipleSelection = val;
-};
 /** 重置按钮操作 */
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
@@ -273,24 +249,6 @@ const onRowDel = (row: any) => {
 		})
 		.catch(() => {});
 };
-// 导出表格
-const onImportTable = () => {
-	const tabeHeader = [
-		{ key: 'name', colWidth: '', title: '姓名', type: 'text', isCheck: true },
-		{ key: 'userName', colWidth: '', title: '账号', type: 'text', isCheck: true },
-		{ key: 'orgName', colWidth: '', title: '所属部门', type: 'text', isCheck: true },
-		{ key: 'roles', colWidth: '', title: '角色', type: 'text', isCheck: true },
-		{ key: 'phoneNo', colWidth: '', title: '电话号码', type: 'text', isCheck: true },
-		{ key: 'staffNo', colWidth: '', title: '工号', type: 'text', isCheck: true },
-		{ key: 'defaultTelNo', colWidth: '', title: '默认分机', type: 'text', isCheck: true },
-		{ key: 'creationTime', colWidth: '', title: '更新时间', type: 'text', isCheck: true },
-	];
-	table2excel(
-		tabeHeader,
-		state.multipleSelection,
-		`${themeConfig.value.globalTitle}-${route.meta.title} ${formatDate(new Date(), 'YYYY-mm-dd HH-MM')}`
-	);
-};
 onMounted(() => {
 	getRolesFn();
 	getList();