浏览代码

登录加密

zhangchong 2 年之前
父节点
当前提交
5f31159cb4

+ 11 - 0
package-lock.json

@@ -21,6 +21,7 @@
 				"file-saver": "^2.0.5",
 				"js-cookie": "^3.0.1",
 				"js-table2excel": "^1.0.3",
+				"jsencrypt": "^3.3.2",
 				"mitt": "^3.0.0",
 				"nprogress": "^0.2.0",
 				"pinia": "^2.0.25",
@@ -2865,6 +2866,11 @@
 				"js-yaml": "bin/js-yaml.js"
 			}
 		},
+		"node_modules/jsencrypt": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.3.2.tgz",
+			"integrity": "sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A=="
+		},
 		"node_modules/json-parse-even-better-errors": {
 			"version": "2.3.1",
 			"resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -6615,6 +6621,11 @@
 				"argparse": "^2.0.1"
 			}
 		},
+		"jsencrypt": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.3.2.tgz",
+			"integrity": "sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A=="
+		},
 		"json-parse-even-better-errors": {
 			"version": "2.3.1",
 			"resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",

+ 1 - 0
package.json

@@ -25,6 +25,7 @@
 		"file-saver": "^2.0.5",
 		"js-cookie": "^3.0.1",
 		"js-table2excel": "^1.0.3",
+		"jsencrypt": "^3.3.2",
 		"mitt": "^3.0.0",
 		"nprogress": "^0.2.0",
 		"pinia": "^2.0.25",

+ 36 - 20
src/components/LogicFlow/PropertySetting/summary.vue

@@ -37,19 +37,22 @@
 				prop="handlerClassifiesOrgin"
 				:rules="[{ required: true, message: `请选择${itemName}`, trigger: 'change' }]"
 			>
-				<el-select-v2
+				<el-select
 					v-model="form.handlerClassifiesOrgin"
-					class="w100"
+					multiple
 					filterable
-					:options="usetList"
-					:loading="loading"
+					remote
+					class="w100"
+					reserve-keyword
 					placeholder="请输入用户名称"
-					multiple
+					remote-show-suffix
 					:remote-method="remoteMethod"
-					clearable
-					remote
+					:loading="loading"
 					@change="getSelectValue"
-				/>
+					value-key="id"
+				>
+					<el-option v-for="item in usetList" :key="item.id" :label="item.name" :value="item" />
+				</el-select>
 			</el-form-item>
 			<!-- 部门 -->
 			<el-form-item
@@ -182,24 +185,38 @@ const checkChange = () => {
 	// 使用模板字符串
 	form.handlerClassifies = `${JSON.stringify(arr)}`;
 };
+const removeDuplicateObj = (arr: any[]) => {
+	let obj = {};
+	arr = arr.reduce((newArr: any, next: any) => {
+		obj[next.id] ? '' : (obj[next.id] = true && newArr.push(next));
+		return newArr;
+	}, []);
+	return arr;
+};
+
 // 远程搜索用户名称
 const remoteMethod = (query: string) => {
 	if (query !== '') {
 		loading.value = true;
 		queryUser({ name: query }).then((res: any) => {
 			loading.value = false;
-			usetList.value = res.result ?? [];
-			usetList.value = usetList.value.map((item: any) => ({
-				value: item.id,
-				label: item.name + '-' + item.orgName,
-			}));
+			usetList.value.push(...res.result);
+			usetList.value = removeDuplicateObj(usetList.value);
+			usetList.value = usetList.value.map((item: any) => {
+				if (!item.name.includes('-')) {
+					return {
+						...item,
+						name: item.name + '-' + item.organization.orgName,
+					};
+				} else {
+					return { ...item };
+				}
+			});
 		});
-	} else {
-		usetList.value = [];
 	}
 };
 // 获取选择对象
-const getSelectValue = (query: string) => {
+const getSelectValue = (query: any) => {
 	// 提炼函数
 	const getSelectedItems = (list: any[]) => {
 		return list.filter((item) => query.includes(item.value)).map((item) => ({ name: item.label, id: item.value }));
@@ -208,7 +225,7 @@ const getSelectValue = (query: string) => {
 	if (form.handlerType !== 3) {
 		arr = getSelectedItems(selectList.value);
 	} else {
-		arr = getSelectedItems(usetList.value);
+		arr = query.map((item: any) => ({ name: item.name, id: item.id }));
 	}
 	// 使用模板字符串
 	form.handlerClassifies = `${JSON.stringify(arr)}`;
@@ -276,9 +293,8 @@ onMounted(async () => {
 	// 合并表单
 	Object.assign(form, props.modelValue);
 	if (form.handlerClassifies.includes('[')) {
-		form.handlerClassifiesOrgin = JSON.parse(form.handlerClassifies).map((item: any) => {
-			return item.id;
-		});
+		form.handlerClassifiesOrgin = JSON.parse(form.handlerClassifies);
+		usetList.value = JSON.parse(form.handlerClassifies);
 	}
 	if ([0, 1, 2].includes(form.handlerType)) {
 		const res: any = await getSelectList(form.handlerType);

+ 34 - 29
src/components/LogicFlow/PropertySetting/task.vue

@@ -37,19 +37,22 @@
 				prop="handlerClassifiesOrgin"
 				:rules="[{ required: true, message: `请选择${itemName}`, trigger: 'change' }]"
 			>
-				<el-select-v2
+				<el-select
 					v-model="form.handlerClassifiesOrgin"
-					class="w100"
+					multiple
 					filterable
-					:options="usetList"
-					:loading="loading"
+					remote
+					class="w100"
+					reserve-keyword
 					placeholder="请输入用户名称"
-					multiple
+					remote-show-suffix
 					:remote-method="remoteMethod"
-					clearable
-					remote
+					:loading="loading"
 					@change="getSelectValue"
-				/>
+					value-key="id"
+				>
+					<el-option v-for="item in usetList" :key="item.id" :label="item.name" :value="item" />
+				</el-select>
 			</el-form-item>
 			<!-- 部门 -->
 			<el-form-item
@@ -153,25 +156,32 @@ const changeOptions = (e: any) => {
 		getcanuseorgFn();
 	}
 };
+const removeDuplicateObj = (arr: any[]) => {
+	let obj = {};
+	arr = arr.reduce((newArr: any, next: any) => {
+		obj[next.id] ? '' : (obj[next.id] = true && newArr.push(next));
+		return newArr;
+	}, []);
+	return arr;
+};
 // 远程搜索用户名称
 const remoteMethod = (query: string) => {
 	if (query !== '') {
 		loading.value = true;
 		queryUser({ name: query }).then((res: any) => {
 			loading.value = false;
-			if (res.result?.length) {
-				usetList.value.push(...res.result);
-				usetList.value = usetList.value.map((item: any) => {
-					if (item.name) {
-						return {
-							value: item.id,
-							label: item.name + '-' + item.orgName,
-						};
-					} else {
-						return { ...item };
-					}
-				});
-			}
+			usetList.value.push(...res.result);
+			usetList.value = removeDuplicateObj(usetList.value);
+			usetList.value = usetList.value.map((item: any) => {
+				if (!item.name.includes('-')) {
+					return {
+						...item,
+						name: item.name + '-' + item.organization.orgName,
+					};
+				} else {
+					return { ...item };
+				}
+			});
 		});
 	}
 };
@@ -208,7 +218,7 @@ const getSelectValue = (query: any[]) => {
 	if (form.handlerType !== 3) {
 		arr = getSelectedItems(selectList.value);
 	} else {
-		arr = getSelectedItems(usetList.value);
+		arr = query.map((item: any) => ({ name: item.name, id: item.id }));
 	}
 	// 使用模板字符串
 	form.handlerClassifies = `${JSON.stringify(arr)}`;
@@ -229,13 +239,8 @@ onMounted(async () => {
 	// 合并表单
 	Object.assign(form, props.modelValue);
 	if (form.handlerClassifies.includes('[')) {
-		form.handlerClassifiesOrgin = JSON.parse(form.handlerClassifies).map((item: any) => {
-			return item.id;
-		});
-		let handlerClassifies = JSON.parse(form.handlerClassifies);
-		for (let i of handlerClassifies) {
-			remoteMethod(i.name.split('-')[0]);
-		}
+		form.handlerClassifiesOrgin = JSON.parse(form.handlerClassifies);
+		usetList.value = JSON.parse(form.handlerClassifies);
 	}
 	if ([0, 1, 2].includes(form.handlerType)) {
 		const res: any = await getSelectList(form.handlerType);

+ 13 - 1
src/views/login/component/account.vue

@@ -84,6 +84,7 @@ import { NextLoading } from '/@/utils/loading';
 import Watermark from '/@/utils/watermark';
 import type { FormInstance } from 'element-plus';
 import { signIn } from '/@/api/login';
+import { JSEncrypt } from 'jsencrypt'; // rsa加密
 // 定义变量内容
 const storesThemeConfig = useThemeConfig();
 const { themeConfig } = storeToRefs(storesThemeConfig);
@@ -113,7 +114,18 @@ const onSignIn = async (formEl: FormInstance | undefined) => {
 	await formEl.validate((valid) => {
 		if (valid) {
 			state.loading = true;
-			signIn(state.ruleForm)
+			// 新建一个JSEncrypt对象
+			let encryptor = new JSEncrypt();
+			// 设置公钥
+			let publicKey =
+				'-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgw+/x6IQPkH0A4eoF63jkLThsOXWyNBdcL9LATGy/G1yTHOr1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRWMONxIIF289riS6bDI4Ox/pFmOfmElFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/voVeDTiOIw9y3tokIxjKwuJ/mQ66MkKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6WBFWkxlAqKOWggDU7YohfrbNkg3bd0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+PPrr5JWDNYQTXFQklqgae+Puge7xxZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJUQIDAQAB-----END PUBLIC KEY-----';
+			encryptor.setPublicKey(publicKey); // publicKey为公钥
+			// 加密数据
+			const submitObj = {
+				userName: encryptor.encrypt(state.ruleForm.userName),
+				password: encryptor.encrypt(state.ruleForm.password)
+			};
+			signIn(submitObj)
 				.then(async (res: any) => {
 					//登录
 					// 存储 token 到浏览器缓存