Parcourir la source

fix: 修改捂脸概览告警饼图的颜色,修改基础配置为配置管理,包含原来的基础配置和安全配置页面,并优化安全配置页面代码

yanglzh il y a 1 an
Parent
commit
ac3059530f

+ 1 - 1
src/views/iot/iotmanager/dashboard.vue

@@ -304,7 +304,7 @@ export default defineComponent({
 				data.push({ name: getname[i], value: getvalue[i] });
 			}
 
-			const colorList = ['#FF0000', '#FEC279', '#968AF5', '#51A3FC', '#36C78B',];
+			const colorList = ['#FF0000', '#FEC279', '#968AF5', '#51A3FC', '#669',];
 			const color = state.pieChartLevel.map(level => colorList[level - 1])
 
 			const option = {

+ 169 - 0
src/views/system/basicConfig/basic.vue

@@ -0,0 +1,169 @@
+<template>
+	<el-form :model="state.tableData.param" label-position="top" ref="queryRef" :inline="true" label-width="100px">
+		<div class="form-inner-wrap">
+			<div class="left-wrap">
+				<el-form-item label="系统名称" prop="keyWord">
+					<el-input v-model="state.info.name" placeholder="请输入系统名称" clearable size="default" />
+				</el-form-item>
+				<el-form-item label="系统版权" prop="keyWord">
+					<el-input v-model="state.info.copyright" placeholder="请输入系统版权" clearable size="default" />
+				</el-form-item>
+				<el-row>
+					<el-col :span="12">
+						<el-form-item label="系统LOGO" prop="keyWord">
+							<uploadVue accept=".jpg,.png,.jpeg,.gif,.svg" :name="'logo'" @set-img="setImg">
+								<el-image style="width: 100%;" :src="state.info.logo" />
+								<!-- <div class="tips">点击上方照片,即可更改头像</div> -->
+							</uploadVue>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="系统LOGO(小图标)" prop="keyWord">
+							<uploadVue accept=".jpg,.png,.jpeg,.gif,.svg" :name="'mini'" @set-img="setImg">
+								<el-image style="width: 100%;" :src="state.info.mini" />
+								<!-- <div class="tips">点击上方照片,即可更改头像</div> -->
+							</uploadVue>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				<el-form-item>
+					<el-button v-auth="'save'" size="default" type="primary" class="ml10" @click="setDetails">保存</el-button>
+				</el-form-item>
+			</div>
+			<div class="right-wrap">
+				<el-form-item label="登录展示图" prop="keyWord">
+					<uploadVue accept=".jpg,.png,.jpeg,.gif,.svg" :name="'pic'" @set-img="setImg">
+						<el-image style="width: 100%;" :src="state.info.pic" fit="contain" />
+					</uploadVue>
+				</el-form-item>
+			</div>
+		</div>
+	</el-form>
+</template>
+
+<script lang="ts" setup>
+import { reactive, onMounted, ref } from 'vue';
+import { ElMessage } from 'element-plus';
+import api from '/@/api/system';
+import uploadVue from '/@/components/upload-wrapper/index.vue';
+
+
+const queryRef = ref();
+const state = reactive({
+	ids: [],
+	info: {
+		name: "",
+		copyright: "",
+		accesskey: "",
+		secretkey: "",
+		logo: "",
+		mini: "",
+		pic: ""
+	},
+	data: [],
+	tableData: {
+		data: [],
+		loading: false,
+		param: {
+			pageNum: 1,
+			PageSize: 10,
+			status: -1,
+			keyWord: ""
+		},
+		total: 0
+	},
+});
+// 初始化表格数据
+const initBasicConfigInfo = () => {
+	queryBasicConfigInfo();
+};
+const queryBasicConfigInfo = () => {
+	state.tableData.loading = true
+	api.basicConfig.getDetails({ types: 0 }).then((res: any) => {
+		state.data = res.data;
+		res.data.forEach((element: any) => {
+			if (element.configName == '系统名称') {
+				state.info.name = element.configValue
+			} else if (element.configName == '系统版权') {
+				state.info.copyright = element.configValue
+			} else if (element.configName == '系统LOGO') {
+				state.info.logo = element.configValue
+			} else if (element.configName == '系统LOGO(小图标)') {
+				state.info.mini = element.configValue
+			} else if (element.configName == '登录展示图') {
+				state.info.pic = element.configValue
+			}
+		});
+	});
+};
+
+const setDetails = () => {
+	if (!state.info.name) {
+		ElMessage.error('请填写系统名称');
+		return;
+	}
+	if (!state.info.copyright) {
+		ElMessage.error('请填写系统版权');
+		return;
+	}
+	if (!state.info.logo) {
+		ElMessage.error('请上传系统LOGO');
+		return;
+	}
+
+	if (!state.info.mini) {
+		ElMessage.error('请上传LOGO(小图标)');
+		return;
+	} if (!state.info.pic) {
+		ElMessage.error('请上传登录展示图');
+		return;
+	}
+	state.data.forEach((element: object) => {
+		if (element.configName == '系统名称') {
+			element.configValue = state.info.name
+		} else if (element.configName == '系统版权') {
+			element.configValue = state.info.copyright
+		} else if (element.configName == '系统LOGO') {
+			element.configValue = state.info.logo
+		} else if (element.configName == '系统LOGO(小图标)') {
+			element.configValue = state.info.mini
+		} else if (element.configName == '登录展示图') {
+			element.configValue = state.info.pic
+		}
+	})
+	api.basicConfig.setDetails({ ConfigInfo: state.data }).then(() => {
+		ElMessage.success('设置成功');
+
+	});
+};
+
+const setImg = (img: string, name: string) => {
+	state.info[name] = img;
+}
+
+// 页面加载时
+onMounted(() => {
+	initBasicConfigInfo();
+});
+
+</script>
+
+
+<style scoped lang="scss">
+:deep(.el-form) {
+	width: 100%;
+}
+
+:deep(.form-inner-wrap) {
+	width: 100%;
+	display: flex;
+	justify-content: space-between;
+
+	.left-wrap,
+	.right-wrap {
+		width: 100%;
+	}
+
+}
+</style>

+ 39 - 150
src/views/system/basicConfig/index.vue

@@ -1,173 +1,62 @@
 <template>
-	<div class="system-dic-container">
+	<div class="page">
 		<el-card shadow="nover">
-			<el-form :model="state.tableData.param" label-position="top" ref="queryRef" :inline="true" label-width="100px">
-				<div class="form-inner-wrap">
-					<div class="left-wrap">
-						<el-form-item label="系统名称" prop="keyWord">
-							<el-input v-model="state.info.name" placeholder="请输入系统名称" clearable size="default" />
-						</el-form-item>
-						<el-form-item label="系统版权" prop="keyWord">
-							<el-input v-model="state.info.copyright" placeholder="请输入系统版权" clearable size="default" />
-						</el-form-item>
-						<el-row>
-							<el-col :span="12">
-								<el-form-item label="系统LOGO" prop="keyWord">
-									<uploadVue accept=".jpg,.png,.jpeg,.gif,.svg" :name="'logo'" @set-img="setImg">
-										<el-image style="width: 100%;" :src="state.info.logo" />
-										<!-- <div class="tips">点击上方照片,即可更改头像</div> -->
-									</uploadVue>
-								</el-form-item>
-							</el-col>
-
-							<el-col :span="12">
-								<el-form-item label="系统LOGO(小图标)" prop="keyWord">
-									<uploadVue accept=".jpg,.png,.jpeg,.gif,.svg" :name="'mini'" @set-img="setImg">
-										<el-image style="width: 100%;" :src="state.info.mini" />
-										<!-- <div class="tips">点击上方照片,即可更改头像</div> -->
-									</uploadVue>
-								</el-form-item>
-							</el-col>
-						</el-row>
-						<el-form-item>
-							<el-button v-auth="'save'" size="default" type="primary" class="ml10" @click="setDetails">保存</el-button>
-						</el-form-item>
-					</div>
-					<div class="right-wrap">
-						<el-form-item label="登录展示图" prop="keyWord">
-							<uploadVue accept=".jpg,.png,.jpeg,.gif,.svg" :name="'pic'" @set-img="setImg">
-								<el-image style="width: 100%;" :src="state.info.pic" fit="contain" />
-							</uploadVue>
-						</el-form-item>
-					</div>
-				</div>
-			</el-form>
+			<el-menu :default-active="activeName" @select="menuChange" class="el-menu-vertical-demo" size="small">
+				<el-menu-item index="1">基础配置</el-menu-item>
+				<el-menu-item index="2">安全配置</el-menu-item>
+			</el-menu>
+		</el-card>
+		<el-card shadow="nover">
+			<div class="scroll-wrapper">
+				<BasicVue v-if="activeName === '1'"></BasicVue>
+				<SafeVue v-else-if="activeName === '2'"></SafeVue>
+			</div>
 		</el-card>
 	</div>
 </template>
 
 <script lang="ts" setup>
-import { reactive, onMounted, ref } from 'vue';
-import { ElMessage } from 'element-plus';
-import api from '/@/api/system';
-import uploadVue from '/@/components/upload-wrapper/index.vue';
-
-
-const queryRef = ref();
-const state = reactive({
-	ids: [],
-	info: {
-		name: "",
-		copyright: "",
-		accesskey: "",
-		secretkey: "",
-		logo: "",
-		mini: "",
-		pic: ""
-	},
-	data: [],
-	tableData: {
-		data: [],
-		loading: false,
-		param: {
-			pageNum: 1,
-			PageSize: 10,
-			status: -1,
-			keyWord: ""
-		},
-		total: 0
-	},
-});
-// 初始化表格数据
-const initBasicConfigInfo = () => {
-	queryBasicConfigInfo();
-};
-const queryBasicConfigInfo = () => {
-	state.tableData.loading = true
-	api.basicConfig.getDetails({types: 0}).then((res: any) => {
-		state.data = res.data;
-		res.data.forEach((element: object) => {
-			if (element.configName == '系统名称') {
-				state.info.name = element.configValue
-			} else if (element.configName == '系统版权') {
-				state.info.copyright = element.configValue
-			} else if (element.configName == '系统LOGO') {
-				state.info.logo = element.configValue
-			} else if (element.configName == '系统LOGO(小图标)') {
-				state.info.mini = element.configValue
-			} else if (element.configName == '登录展示图') {
-				state.info.pic = element.configValue
-			}
-		});
-	});
-};
+import { ref } from 'vue';
+import BasicVue from "./basic.vue";
+import SafeVue from "./safe.vue";
 
-const setDetails = () => {
-	if (!state.info.name) {
-		ElMessage.error('请填写系统名称');
-		return;
-	}
-	if (!state.info.copyright) {
-		ElMessage.error('请填写系统版权');
-		return;
-	}
-	if (!state.info.logo) {
-		ElMessage.error('请上传系统LOGO');
-		return;
-	}
-
-	if (!state.info.mini) {
-		ElMessage.error('请上传LOGO(小图标)');
-		return;
-	} if (!state.info.pic) {
-		ElMessage.error('请上传登录展示图');
-		return;
-	}
-	state.data.forEach((element: object) => {
-		if (element.configName == '系统名称') {
-			element.configValue = state.info.name
-		} else if (element.configName == '系统版权') {
-			element.configValue = state.info.copyright
-		} else if (element.configName == '系统LOGO') {
-			element.configValue = state.info.logo
-		} else if (element.configName == '系统LOGO(小图标)') {
-			element.configValue = state.info.mini
-		} else if (element.configName == '登录展示图') {
-			element.configValue = state.info.pic
-		}
-	})
-	api.basicConfig.setDetails({ ConfigInfo: state.data }).then(() => {
-		ElMessage.success('设置成功');
 
-	});
-};
+const activeName = ref('1')
 
-const setImg = (img: string, name: string) => {
-	state.info[name] = img;
+function menuChange(index: string) {
+	activeName.value = index
 }
 
-// 页面加载时
-onMounted(() => {
-	initBasicConfigInfo();
-});
-
 </script>
 
 
 <style scoped lang="scss">
-:deep(.el-form) {
-	width: 100%;
-}
-
-:deep(.form-inner-wrap) {
-	width: 100%;
+.page {
 	display: flex;
 	justify-content: space-between;
+	gap: 16px;
+
+	.el-card:first-child {
+		width: 240px;
+	}
 
-	.left-wrap,
-	.right-wrap {
-		width: 100%;
+	.el-card:last-child {
+		flex: 1;
+	}
+	.el-card ::v-deep(.el-card__body) {
+		flex: 1;
+		height: 100%;
+		overflow-y: auto;
+		overflow-x: hidden;
 	}
 
+	.el-menu {
+		width: 200px;
+
+		::v-deep(.el-menu-item) {
+			height: 40px !important;
+			line-height: 40px !important;
+		}
+	}
 }
 </style>

+ 219 - 0
src/views/system/basicConfig/safe.vue

@@ -0,0 +1,219 @@
+<template>
+	<el-form :model="form" ref="queryRef" label-width="155px">
+		<div :style="{ width: '450px' }">
+			<el-descriptions title="安全控制" v-if="form.security || form.rsaEnabled"></el-descriptions>
+			<el-form-item label="是否启用安全控制" prop="security" v-if="form.security">
+				<el-radio-group v-model="form.security">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="是否启用RSA" prop="rsaEnabled" v-if="form.rsaEnabled">
+				<el-radio-group v-model="form.rsaEnabled">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-descriptions title="登录设置" v-if="form.singleLogin || form.changePwdFirstLogin || form.expiryDate || form.errorNum || form.againLoginDate || form.changePeriodSwitch || form.changePeriod"></el-descriptions>
+			<el-form-item label="是否单一登录" prop="singleLogin" v-if="form.singleLogin">
+				<el-radio-group v-model="form.singleLogin">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="首次登录是否更改密码" prop="changePwdFirstLogin" v-if="form.changePwdFirstLogin">
+				<el-radio-group v-model="form.changePwdFirstLogin">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="TOKEN过期时间" prop="expiryDate" v-if="form.expiryDate">
+				<el-input type="number" v-model="form.expiryDate" placeholder="请输入">
+					<template #append>分钟</template>
+				</el-input>
+			</el-form-item>
+			<el-form-item label="密码输入错误次数" prop="errorNum" v-if="form.errorNum">
+				<el-input type="number" v-model="form.errorNum" placeholder="请输入"></el-input>
+			</el-form-item>
+			<el-form-item label="允许再次登录时间" prop="againLoginDate" v-if="form.againLoginDate">
+				<el-input type="number" v-model="form.againLoginDate" placeholder="请输入">
+					<template #append>分钟</template>
+				</el-input>
+			</el-form-item>
+			<el-form-item label="密码更换周期开关" prop="changePeriodSwitch" v-if="form.changePeriodSwitch">
+				<el-radio-group v-model="form.changePeriodSwitch">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="密码更换周期" prop="changePeriod" v-if="form.changePeriod">
+				<el-input type="number" v-model="form.changePeriod" placeholder="请输入">
+					<template #append>天</template>
+				</el-input>
+			</el-form-item>
+			<el-descriptions title="密码策略设置" v-if="form.uppercase || form.lowercase || form.digit || form.complexity || form.minimum"></el-descriptions>
+			<el-form-item label="是否包含大写字母" prop="uppercase" v-if="form.uppercase">
+				<el-radio-group v-model="form.uppercase">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="是否包含小写字母" prop="lowercase" v-if="form.lowercase">
+				<el-radio-group v-model="form.lowercase">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="是否包含数字" prop="digit" v-if="form.digit">
+				<el-radio-group v-model="form.digit">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="是否包含复杂字符" prop="complexity" v-if="form.complexity">
+				<el-radio-group v-model="form.complexity">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="密码长度" prop="minimum" v-if="form.minimum">
+				<el-input type="number" v-model="form.minimum" placeholder="请输入密码长度"></el-input>
+			</el-form-item>
+			<el-descriptions title="权限设置" v-if="form.button || form.column || form.api"></el-descriptions>
+			<el-form-item label="按钮开关" prop="button" v-if="form.button">
+				<el-radio-group v-model="form.button">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="列表开关" prop="column" v-if="form.column">
+				<el-radio-group v-model="form.column">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="API开关" prop="api" v-if="form.api">
+				<el-radio-group v-model="form.api">
+					<el-radio label="1">启用</el-radio>
+					<el-radio label="0">禁用</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item>
+				<el-button type="primary" class="ml10" @click="saveEmailConfig">保存</el-button>
+			</el-form-item>
+		</div>
+	</el-form>
+</template>
+
+<script lang="ts" setup>
+import { reactive } from 'vue';
+import { ElMessage } from 'element-plus';
+import api from '/@/api/system';
+
+const emailConfigMap: any = {}
+
+const form = reactive({
+	singleLogin: '',
+	expiryDate: '',
+	uppercase: '',
+	lowercase: '',
+	digit: '',
+	complexity: '',
+	minimum: '',
+	errorNum: '',
+	againLoginDate: '',
+	changePeriod: '',
+	button: '',
+	column: '',
+	api: '',
+	security: '',
+	changePeriodSwitch: '',
+	changePwdFirstLogin: '',
+	rsaEnabled: '',
+})
+
+// 是否包含大写字母
+// 是否包含小写字母
+// 是否包含数字
+// 是否包含复杂字符
+// 密码长度
+// 密码输入错误次数
+// 允许再次登录时间
+// 密码更换周期
+api.basicConfig.getDetails({ types: 1 }).then((res: any) => {
+	res.data.forEach((item: any) => {
+		emailConfigMap[item.configKey] = item
+	})
+
+	form.singleLogin = get('sys.is.single.login')
+	form.expiryDate = get('sys.token.expiry.date')
+	form.uppercase = get('sys.require.uppercase.letter')
+	form.lowercase = get('sys.require.lowercase.letter')
+	form.digit = get('sys.require.digit')
+	form.complexity = get('sys.require.complexity')
+	form.minimum = get('sys.password.minimum.length')
+	form.errorNum = get('sys.password.error.num')
+	form.againLoginDate = get('sys.again.login.date')
+	form.changePeriod = get('sys.password.change.period')
+	form.changePeriodSwitch = get('sys.password.change.period.switch')
+	form.changePwdFirstLogin = get('sys.change.password.for.first.login')
+	form.button = get('sys.button.switch')
+	form.column = get('sys.column.switch')
+	form.api = get('sys.api.switch')
+	form.security = get('sys.is.security.control.enabled')
+	form.rsaEnabled = get('sys.is.rsa.enabled')
+});
+
+function saveEmailConfig() {
+	set('sys.is.single.login', form.singleLogin)
+	set('sys.token.expiry.date', form.expiryDate)
+	set('sys.require.uppercase.letter', form.uppercase)
+	set('sys.require.lowercase.letter', form.lowercase)
+	set('sys.require.digit', form.digit)
+	set('sys.require.complexity', form.complexity)
+	set('sys.password.minimum.length', form.minimum)
+	set('sys.password.error.num', form.errorNum)
+	set('sys.again.login.date', form.againLoginDate)
+	set('sys.password.change.period', form.changePeriod)
+	set('sys.password.change.period.switch', form.changePeriodSwitch)
+	set('sys.change.password.for.first.login', form.changePwdFirstLogin)
+	set('sys.button.switch', form.button)
+	set('sys.column.switch', form.column)
+	set('sys.api.switch', form.api)
+	set('sys.is.security.control.enabled', form.security)
+	set('sys.is.rsa.enabled', form.rsaEnabled)
+	api.basicConfig.setDetails({ ConfigInfo: Object.values(emailConfigMap) }).then(() => {
+		ElMessage.success('操作成功');
+	});
+}
+
+function get(key: string) {
+	return emailConfigMap[key]?.configValue
+}
+
+function set(key: string, value: string) {
+	emailConfigMap[key] && (emailConfigMap[key].configValue = value)
+}
+
+</script>
+
+<style scoped lang="scss">
+:deep(.el-form) {
+	width: 100%;
+}
+
+.el-form-item {
+	margin-bottom: 10px;
+}
+
+:deep(.form-inner-wrap) {
+	width: 100%;
+	display: flex;
+	justify-content: space-between;
+
+	.left-wrap,
+	.right-wrap {
+		width: 100%;
+	}
+}
+</style>

+ 0 - 218
src/views/system/safeConfig/index.vue

@@ -1,218 +0,0 @@
-<template>
-	<div class="system-dic-container page-full">
-		<el-card class="page-full-part" shadow="never">
-			<el-form :model="form" ref="queryRef" label-width="155px">
-				<div :style="{ width: '450px' }">
-					<el-descriptions title="安全控制" v-if="form.security || form.rsaEnabled"></el-descriptions>
-					<el-form-item label="是否启用安全控制" prop="security" v-if="form.security">
-						<el-radio-group v-model="form.security">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="是否启用RSA" prop="rsaEnabled" v-if="form.rsaEnabled">
-						<el-radio-group v-model="form.rsaEnabled">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-descriptions title="登录设置" v-if="form.singleLogin || form.changePwdFirstLogin || form.expiryDate || form.errorNum || form.againLoginDate || form.changePeriodSwitch || form.changePeriod"></el-descriptions>
-					<el-form-item label="是否单一登录" prop="singleLogin" v-if="form.singleLogin">
-						<el-radio-group v-model="form.singleLogin">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="首次登录是否更改密码" prop="changePwdFirstLogin" v-if="form.changePwdFirstLogin">
-						<el-radio-group v-model="form.changePwdFirstLogin">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="TOKEN过期时间" prop="expiryDate" v-if="form.expiryDate">
-						<el-input type="number" v-model="form.expiryDate" placeholder="请输入">
-							<template #append>分钟</template>
-						</el-input>
-					</el-form-item>
-					<el-form-item label="密码输入错误次数" prop="errorNum" v-if="form.errorNum">
-						<el-input type="number" v-model="form.errorNum" placeholder="请输入"></el-input>
-					</el-form-item>
-					<el-form-item label="允许再次登录时间" prop="againLoginDate" v-if="form.againLoginDate">
-						<el-input type="number" v-model="form.againLoginDate" placeholder="请输入">
-							<template #append>分钟</template>
-						</el-input>
-					</el-form-item>
-					<el-form-item label="密码更换周期开关" prop="changePeriodSwitch" v-if="form.changePeriodSwitch">
-						<el-radio-group v-model="form.changePeriodSwitch">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="密码更换周期" prop="changePeriod" v-if="form.changePeriod">
-						<el-input type="number" v-model="form.changePeriod" placeholder="请输入">
-							<template #append>天</template>
-						</el-input>
-					</el-form-item>
-					<el-descriptions title="密码策略设置" v-if="form.uppercase || form.lowercase || form.digit || form.complexity || form.minimum"></el-descriptions>
-					<el-form-item label="是否包含大写字母" prop="uppercase" v-if="form.uppercase">
-						<el-radio-group v-model="form.uppercase">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="是否包含小写字母" prop="lowercase" v-if="form.lowercase">
-						<el-radio-group v-model="form.lowercase">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="是否包含数字" prop="digit" v-if="form.digit">
-						<el-radio-group v-model="form.digit">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="是否包含复杂字符" prop="complexity" v-if="form.complexity">
-						<el-radio-group v-model="form.complexity">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="密码长度" prop="minimum" v-if="form.minimum">
-						<el-input type="number" v-model="form.minimum" placeholder="请输入密码长度"></el-input>
-					</el-form-item>
-					<el-descriptions title="权限设置" v-if="form.button || form.column || form.api"></el-descriptions>
-					<el-form-item label="按钮开关" prop="button" v-if="form.button">
-						<el-radio-group v-model="form.button">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="列表开关" prop="column" v-if="form.column">
-						<el-radio-group v-model="form.column">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="API开关" prop="api" v-if="form.api">
-						<el-radio-group v-model="form.api">
-							<el-radio label="1">启用</el-radio>
-							<el-radio label="0">禁用</el-radio>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item>
-						<el-button type="primary" class="ml10" @click="saveEmailConfig">确认</el-button>
-					</el-form-item>
-				</div>
-			</el-form>
-		</el-card>
-
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { reactive } from 'vue';
-import { ElMessage } from 'element-plus';
-import api from '/@/api/system';
-
-const emailConfigMap: any = {}
-
-const form = reactive({
-	singleLogin: '',
-	expiryDate: '',
-	uppercase: '',
-	lowercase: '',
-	digit: '',
-	complexity: '',
-	minimum: '',
-	errorNum: '',
-	againLoginDate: '',
-	changePeriod: '',
-	button: '',
-	column: '',
-	api: '',
-	security: '',
-	changePeriodSwitch: '',
-	changePwdFirstLogin: '',
-	rsaEnabled: '',
-})
-
-// 是否包含大写字母
-// 是否包含小写字母
-// 是否包含数字
-// 是否包含复杂字符
-// 密码长度
-// 密码输入错误次数
-// 允许再次登录时间
-// 密码更换周期
-api.basicConfig.getDetails({ types: 1 }).then((res: any) => {
-	res.data.forEach((item: any) => {
-		emailConfigMap[item.configKey] = item
-	})
-
-	form.singleLogin = emailConfigMap['sys.is.single.login']?.configValue
-	form.expiryDate = emailConfigMap['sys.token.expiry.date']?.configValue
-	form.uppercase = emailConfigMap['sys.require.uppercase.letter']?.configValue
-	form.lowercase = emailConfigMap['sys.require.lowercase.letter']?.configValue
-	form.digit = emailConfigMap['sys.require.digit']?.configValue
-	form.complexity = emailConfigMap['sys.require.complexity']?.configValue
-	form.minimum = emailConfigMap['sys.password.minimum.length']?.configValue
-	form.errorNum = emailConfigMap['sys.password.error.num']?.configValue
-	form.againLoginDate = emailConfigMap['sys.again.login.date']?.configValue
-	form.changePeriod = emailConfigMap['sys.password.change.period']?.configValue
-	form.changePeriod = emailConfigMap['sys.password.change.period']?.configValue
-	form.changePeriod = emailConfigMap['sys.password.change.period']?.configValue
-	form.changePeriodSwitch = emailConfigMap['sys.password.change.period.switch']?.configValue
-	form.changePwdFirstLogin = emailConfigMap['sys.change.password.for.first.login']?.configValue
-	form.button = emailConfigMap['sys.button.switch']?.configValue
-	form.column = emailConfigMap['sys.column.switch']?.configValue
-	form.api = emailConfigMap['sys.api.switch']?.configValue
-	form.security = emailConfigMap['sys.is.security.control.enabled']?.configValue
-	form.rsaEnabled = emailConfigMap['sys.is.rsa.enabled']?.configValue
-});
-
-function saveEmailConfig() {
-	emailConfigMap['sys.is.single.login'] && (emailConfigMap['sys.is.single.login'].configValue = form.singleLogin)
-	emailConfigMap['sys.token.expiry.date'] && (emailConfigMap['sys.token.expiry.date'].configValue = form.expiryDate)
-	emailConfigMap['sys.require.uppercase.letter'] && (emailConfigMap['sys.require.uppercase.letter'].configValue = form.uppercase)
-	emailConfigMap['sys.require.lowercase.letter'] && (emailConfigMap['sys.require.lowercase.letter'].configValue = form.lowercase)
-	emailConfigMap['sys.require.digit'] && (emailConfigMap['sys.require.digit'].configValue = form.digit)
-	emailConfigMap['sys.require.complexity'] && (emailConfigMap['sys.require.complexity'].configValue = form.complexity)
-	emailConfigMap['sys.password.minimum.length'] && (emailConfigMap['sys.password.minimum.length'].configValue = form.minimum)
-	emailConfigMap['sys.password.error.num'] && (emailConfigMap['sys.password.error.num'].configValue = form.errorNum)
-	emailConfigMap['sys.again.login.date'] && (emailConfigMap['sys.again.login.date'].configValue = form.againLoginDate)
-	emailConfigMap['sys.password.change.period'] && (emailConfigMap['sys.password.change.period'].configValue = form.changePeriod)
-	emailConfigMap['sys.password.change.period.switch'] && (emailConfigMap['sys.password.change.period.switch'].configValue = form.changePeriodSwitch)
-	emailConfigMap['sys.change.password.for.first.login'] && (emailConfigMap['sys.change.password.for.first.login'].configValue = form.changePwdFirstLogin)
-	emailConfigMap['sys.button.switch'] && (emailConfigMap['sys.button.switch'].configValue = form.button)
-	emailConfigMap['sys.column.switch'] && (emailConfigMap['sys.column.switch'].configValue = form.column)
-	emailConfigMap['sys.api.switch'] && (emailConfigMap['sys.api.switch'].configValue = form.api)
-	emailConfigMap['sys.is.security.control.enabled'] && (emailConfigMap['sys.is.security.control.enabled'].configValue = form.security)
-	emailConfigMap['sys.is.rsa.enabled'] && (emailConfigMap['sys.is.rsa.enabled'].configValue = form.rsaEnabled)
-	api.basicConfig.setDetails({ ConfigInfo: Object.values(emailConfigMap) }).then(() => {
-		ElMessage.success('操作成功');
-	});
-}
-
-</script>
-
-<style scoped lang="scss">
-:deep(.el-form) {
-	width: 100%;
-}
-
-.el-form-item {
-	margin-bottom: 10px;
-}
-
-:deep(.form-inner-wrap) {
-	width: 100%;
-	display: flex;
-	justify-content: space-between;
-
-	.left-wrap,
-	.right-wrap {
-		width: 100%;
-	}
-}
-</style>