liuQiang il y a 1 an
Parent
commit
41d6980cac

+ 1 - 0
index.html

@@ -212,6 +212,7 @@
 			</div>
 		</div>
 		<script type="module" src="/src/main.js"></script>
+		<!-- <script src="./src/utils/SmCrypto.min.js"></script> -->
 	</body>
 
 </html>

+ 1 - 0
package.json

@@ -30,6 +30,7 @@
     "jsencrypt": "3.3.1",
     "nprogress": "0.2.0",
     "pinia": "2.0.22",
+    "sm-crypto": "^0.3.13",
     "socket.io-client": "^4.0.0",
     "sockjs-client": "^1.6.1",
     "sortablejs": "^1.15.0",

+ 23 - 9
src/layout/indexCommon.vue

@@ -7,7 +7,7 @@
       >
         <div class="nav-top">
           <div>
-            <img src="@/assets/images/logos.png" /><span
+            <img class="logoImg" src="@/assets/images/logos.png" /><span
               >聚合智慧文档管理系统</span
             >
           </div>
@@ -91,12 +91,18 @@
         </el-aside>
         <el-main class="main">
           <div class="tab_box">
-            <el-tabs
+            <!-- <el-tabs
               v-model="editableTabsValue"
               @tab-change="clickTab"
               @tab-add="addTab"
               type="card"
               class="common-tabs"
+            > -->
+            <el-tabs
+              v-model="editableTabsValue"
+              @tab-add="addTab"
+              type="card"
+              class="common-tabs"
             >
               <el-tab-pane
                 v-for="(item, index) in toRaw(editableTabs)"
@@ -119,7 +125,7 @@
                     :data-path="item.path"
                     :to="{
                       path: item.path,
-                      query: item.clickRowId,
+                      query: {row:item.row},
                     }"
                     @click="paneClick(item)"
                     class="tags-view-item"
@@ -131,7 +137,7 @@
             </el-tabs>
           </div>
           <router-view v-slot="{ Component }" v-if="isAlive">
-            <KeepAlive :exclude="['fileEdit','identifyFont']">
+            <KeepAlive :exclude="['identifyFont']">
               <component :is="Component" />
             </KeepAlive>
           </router-view>
@@ -383,14 +389,15 @@ const clickPath = (index, items) => {
   // console.log("editableTabs", editableTabs.value);
 };
 const clickTab = (item) => {
-  // console.log("item", toRaw(item));
+  console.log("item", toRaw(item));
   setTimeout(() => {
     console.log("toFileData.value", toFileData.value);
     if (toFileData.value) {
+      console.log('tofolder',JSON.stringify(toRaw(toFileData.value.clickRowId)));
       router.push({
         path: toFileData.value.path,
         query: {
-          row: toFileData.value.row,
+          row: JSON.stringify(toRaw(toFileData.value.clickRowId)),
         },
       });
       // router.push({
@@ -410,6 +417,7 @@ const clickTab = (item) => {
         path: "/fileEdit" + data.docId,
         query: {
           clickRowId: data.docId,
+          // row:JSON.stringify(toFileData.value)
           // copyRow: JSON.stringify(data),
         },
       });
@@ -418,17 +426,18 @@ const clickTab = (item) => {
         path: item,
       });
     }
-  }, 500);
+  }, 0);
 };
 const paneClick = (item) => {
   // 可以拿到当前的标签对象
   console.log("paneItem", item);
-  if (item.row) {
+  if (item.clickRowId) {
     // 判断是菜单还是目录
     toFileData.value = item;
   } else {
     toFileData.value = null;
   }
+    clickTab(item.path)
 };
 //创建tab标签事件
 const addTab = (data) => {
@@ -460,7 +469,7 @@ const addFolderAdd = (data) => {
     //需要jSON去转 否则页面无变化 离谱得很
     editableTabs.value = JSON.parse(JSON.stringify(editableTabs.value));
   }
-  console.log("editableTabs", editableTabs.value);
+  console.log("editableTabs", toRaw(editableTabs.value));
 };
 provide("addTab", addTab);
 provide("addFolderAdd", addFolderAdd);
@@ -510,6 +519,11 @@ const closeTab = (item, index, e) => {
         height: 48px;
       }
     }
+    .logoImg{
+      width: 150px !important;
+      height: 100%;
+      margin-right: 10px;
+    }
   }
   .head-img {
     border-radius: 12px;

+ 2 - 1
src/router/index.js

@@ -4,6 +4,7 @@ import {
 } from 'vue-router'
 /* Layout */
 import Layout from '@/layout'
+import common from '@/views/myfile/components/FileEdit.vue'
 import main from '@/layout/components/AppMain.vue'
 /**
  * Note: 路由配置项
@@ -183,7 +184,7 @@ export const constantRoutes = [{
 			},{
 				path: "/fileEdit",
 				name: "fileEdit",
-				component: () => import("@/views/myfile/components/FileEdit.vue"),
+				component: common,
 				children: [{
 					path: '/fileEdit:docId(\\d+)',
 					component: () => import("@/views/myfile/components/FileEdit.vue"),

+ 35 - 22
src/views/login.vue

@@ -162,15 +162,18 @@ import { ElMessage } from "element-plus";
 import Cookies from "js-cookie";
 import { encrypt, decrypt } from "@/utils/jsencrypt";
 import useUserStore from "@/store/modules/user";
+import { sm3 } from "sm-crypto";
 
 const userStore = useUserStore();
 const route = useRoute();
 const router = useRouter();
 const { proxy } = getCurrentInstance();
-
+const useOld = ref(false); //是否用的旧密码
+const oldUseName = ref(); //保存记录的用户名称
+const oldUsePass = ref(); //保存记录的用户密码
 const loginForm = ref({
   username: "admin",
-  password: "admin123",
+  password: "Admin123.",
   rememberMe: false,
   code: "",
   uuid: "",
@@ -194,9 +197,7 @@ const newPassRule = (rule, value, callback) => {
   if (value === "") {
     callback(new Error("请输入密码"));
   } else if (!pPattern.test(value)) {
-    callback(
-      new Error("密码长度最少为8位,包含大小写数字、数字、特殊字符")
-    );
+    callback(new Error("密码长度最少为8位,包含大小写数字、数字、特殊字符"));
   } else {
     callback();
   }
@@ -237,13 +238,15 @@ async function handleLogin() {
     if (valid) {
       // console.log('loginvalid',valid);
       loading.value = true;
+      // console.log("pass",loginForm.value.password);
+      // console.log("sm3",sm3('123456'));
       // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
-      Cookies.set("pass", encrypt(loginForm.value.password), {
+      Cookies.set("pass", sm3(loginForm.value.password), {
         expires: 30,
       });
       if (loginForm.value.rememberMe) {
         Cookies.set("username", loginForm.value.username, { expires: 30 });
-        Cookies.set("password", encrypt(loginForm.value.password), {
+        Cookies.set("password", sm3(loginForm.value.password), {
           expires: 30,
         });
         Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 });
@@ -254,13 +257,20 @@ async function handleLogin() {
         Cookies.remove("rememberMe");
       }
       // 调用action的登录方法
+      const query = loginForm.value;
+      if (oldUseName.value != loginForm.value.username || oldUsePass.value != query.password) {
+        //如果登录的和记录的用户不是同一个, 或者同一个用户但是重新输入了密码,那就需要sm3加密
+        query.password = sm3(query.password);
+      }
+        console.log("query", query);
       userStore
-        .login(loginForm.value)
+        .login(query)
         .then(async (res) => {
           const infoRes = await getInfo();
           console.log("infoRes", infoRes);
           // console.log('loginres',res);
           if (infoRes.repass) {
+            //需要该密
             showEdit.value = true;
             loading.value = false;
             // userStore.logOut();
@@ -292,12 +302,13 @@ function getCode() {
 
 function getCookie() {
   const username = Cookies.get("username");
+  oldUseName.value = username;
   const password = Cookies.get("password");
+  oldUsePass.value = password;
   const rememberMe = Cookies.get("rememberMe");
   loginForm.value = {
     username: username === undefined ? loginForm.value.username : username,
-    password:
-      password === undefined ? loginForm.value.password : decrypt(password),
+    password: password === undefined ? loginForm.value.password : password,
     rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
   };
 }
@@ -307,21 +318,23 @@ const closeRepass = () => {
 };
 
 const submitForm = async (formEl) => {
-  const passwordCookies = Cookies.get("pass");
-  const oldPass = decrypt(passwordCookies);
-  if (formData.value.oldpss != oldPass) {
-    userStore.logOut();
-    return ElMessage({ message: "旧密码输入错误", type: "error" });
-  }
+  // const passwordCookies = Cookies.get("pass");
+  // const oldPass = decrypt(passwordCookies);
+  // if (formData.value.oldpss != oldPass) {
+  //   userStore.logOut();
+  //   return ElMessage({ message: "旧密码输入错误", type: "error" });
+  // }
   if (!formEl) return;
-  console.log("formEl", formEl);
+  // console.log("formEl", formEl);
   await formEl.validate((valid) => {
     if (valid) {
-      updateUserPwd(formData.value.oldpss, formData.value.newpass).then((response) => {
-        console.log('response',response);
-        ElMessage({ message: "修改成功,请重新登录", type: "success" });
-        showEdit.value = false;
-      });
+      updateUserPwd(sm3(formData.value.oldpss), sm3(formData.value.newpass)).then(
+        (response) => {
+          console.log("response", response);
+          ElMessage({ message: "修改成功,请重新登录", type: "success" });
+          showEdit.value = false;
+        }
+      );
     } else {
       ElMessage({ message: "请输入符合规则的密码", type: "error" });
       userStore.logOut();

+ 1 - 2
src/views/myfile/MyFile.vue

@@ -1483,12 +1483,11 @@ export default {
         //输入验证密码后
         const surePass = (pass)=>{
             const passwordCookies = Cookies.get("pass");
-            const oldPass = decrypt(passwordCookies)
             // console.log('pass',pass);
             // console.log('oldPass',oldPass);
             // console.log('clickRow',clickRow);
             showInputPassword.value = false
-            if(pass === oldPass){
+            if(pass === passwordCookies){
                 const passArr = localStorage.getItem('passArr');
                 // console.log('passArr',passArr);
                 if(!passArr){

+ 2 - 1
src/views/myfile/components/inputPassword.vue

@@ -16,6 +16,7 @@
 
 <script setup>
 import { ref, onMounted, toRef, watch } from "vue";
+import { sm3 } from "sm-crypto";
 const props = defineProps({
   showInputPassword: {
     type: Boolean,
@@ -38,7 +39,7 @@ const close = () => {
   emit("closeIptPass");
 };
 const sure = () => {
-  emit("surePass", password.value);
+  emit("surePass", sm3(password.value));
   password.value = "";
 };
 </script>

+ 5 - 2
src/views/system/user/index.vue

@@ -278,6 +278,7 @@
 		deptTreeSelect,
 		updateUserExpand 
 	} from "@/api/system/user";
+	import { sm3 } from "sm-crypto";
 
 	const router = useRouter();
 	const {
@@ -686,14 +687,16 @@
 	function submitForm() {
 		proxy.$refs["userRef"].validate(valid => {
 			if (valid) {
+				const query = form.value
+				query.password = sm3(query.password)
 				if (form.value.userId != undefined) {
-					updateUser(form.value).then(response => {
+					updateUser(query).then(response => {
 						proxy.$modal.msgSuccess("修改成功");
 						open.value = false;
 						getList();
 					});
 				} else {
-					addUser(form.value).then(response => {
+					addUser(query).then(response => {
 						proxy.$modal.msgSuccess("新增成功");
 						open.value = false;
 						getList();

+ 2 - 1
src/views/system/user/profile/resetPwd.vue

@@ -18,6 +18,7 @@
 
 <script setup>
 import { updateUserPwd } from "@/api/system/user";
+import {sm3} from 'sm-crypto';
 
 const { proxy } = getCurrentInstance();
 
@@ -44,7 +45,7 @@ const rules = ref({
 function submit() {
   proxy.$refs.pwdRef.validate(valid => {
     if (valid) {
-      updateUserPwd(user.oldPassword, user.newPassword).then(response => {
+      updateUserPwd(sm3(user.oldPassword), sm3(user.newPassword)).then(response => {
         proxy.$modal.msgSuccess("修改成功");
       });
     }

+ 0 - 75
vite.config.js

@@ -1,75 +0,0 @@
-import {
-	defineConfig,
-	loadEnv
-} from 'vite'
-import path from 'path'
-import createVitePlugins from './vite/plugins'
-
-// https://vitejs.dev/config/
-export default defineConfig(({
-								 mode,
-								 command
-							 }) => {
-	const env = loadEnv(mode, process.cwd())
-	const {
-		VITE_APP_ENV
-	} = env
-	return {
-		// 部署生产环境和开发环境下的URL。
-		// 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
-		// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
-		base: VITE_APP_ENV === 'production' ? '/' : '/',
-		plugins: createVitePlugins(env, command === 'build'),
-		resolve: {
-			// https://cn.vitejs.dev/config/#resolve-alias
-			alias: {
-				// 设置路径
-				'~': path.resolve(__dirname, './'),
-				// 设置别名
-				'@': path.resolve(__dirname, './src')
-			},
-			// https://cn.vitejs.dev/config/#resolve-extensions
-			extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
-		},
-		// vite 相关配置
-		server: {
-			port: 80,
-			host: true,
-			open: true,
-			proxy: {
-				// https://cn.vitejs.dev/config/#server-proxy
-				'/dev-api': {
-					target: 'http://192.168.1.28:8080/',
-					// target: 'http://localhost:8080/',
-					// target:'http://192.168.1.28:8080/',
-					// target:'http://8.142.173.95:19527',
-					changeOrigin: true,
-					rewrite: (p) => p.replace(/^\/dev-api/, '')
-				},
-				//websocket代理
-				'/websocket': {
-					// target:'ws://localhost:8080/websocket',
-					target:'ws://192.168.1.28:8080/websocket',
-					// target:'ws://192.168.1.11:8080/websocket',
-					changeOrigin: true,
-					rewrite: (p) => p.replace(/^\/websocket/, '')
-				}
-			}
-		},
-		//fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file
-		css: {
-			postcss: {
-				plugins: [{
-					postcssPlugin: 'internal:charset-removal',
-					AtRule: {
-						charset: (atRule) => {
-							if (atRule.name === 'charset') {
-								atRule.remove();
-							}
-						}
-					}
-				}]
-			}
-		}
-	}
-})