Quellcode durchsuchen

Merge branch 'dev-wyf' into 'dev'

调整导航栏样式容纳更多按钮& 添加用户加强密码校验和加密&修改密码弹窗逻辑修改

See merge request product-group-fe/sfy-safety-group/sfy-safety!299
ai0197(吴云丰) vor 3 Monaten
Ursprung
Commit
3d3933b3d3

+ 2 - 0
src/api/system/user-operate.ts

@@ -78,6 +78,7 @@ export interface UserLisItem {
   updatedAt: string;
   updatedBy: null;
   username: string;
+  certify: string;
 }
 
 /** root用户给某个租户添加管理员 */
@@ -236,6 +237,7 @@ export interface AddTenantAdminProps {
   isDisabled: boolean | number;
   password: string;
   userId?: number;
+  deptId?: number;
   passwordRe?: string;
 }
 

+ 22 - 16
src/components/Nav.vue

@@ -24,7 +24,7 @@
   </header>
   <Login v-if="userStore.showLogin" @close="userStore.showLogin = false" class="fadeIn" />
   <SwitchAccount v-if="userStore.showSwitchAccount" @close="userStore.showSwitchAccount = false" class="fadeIn" />
-  <UpdatePwd v-if="userStore.showUpdatePwd || firstLogin" @close="handleUpdatePwdClose" class="fadeIn" />
+  <UpdatePwd v-if="userStore.showUpdatePwd || getUserInfo.isFirstLogin" @close="handleUpdatePwdClose" class="fadeIn" />
 </template>
 
 <script lang="ts" setup>
@@ -41,10 +41,12 @@
   import { NAV_LIST } from '@/constant/nav';
   import logo from 'assets/images/home/comac-logo@1X.png';
   import { ElMessage } from 'element-plus';
+  import { storeToRefs } from 'pinia';
   // import searchIcon from 'assets/svg/search.svg';
 
   const userStore = useUserStore();
-  const firstLogin = userStore.getUserInfo.isFirstLogin;
+  const { getUserInfo } = storeToRefs(userStore);
+
   // const activeNav = ref(NAV_LIST[0].name);
   const router = useRouter();
   // const searchValue = ref('');
@@ -72,7 +74,7 @@
   };
 
   const handleUpdatePwdClose = () => {
-    if (firstLogin) {
+    if (getUserInfo.value.isFirstLogin) {
       ElMessage({
         message: '首次登录请修改密码',
         type: 'warning',
@@ -100,7 +102,7 @@
 
     &__nav {
       @include flex-center;
-      gap: 20cpx;
+      gap: 10cpx;
       height: 100%;
       margin-left: 32cpx;
 
@@ -139,25 +141,29 @@
   }
 
   .platform__right {
-    @include flex-center;
-    position: absolute;
-    top: 0;
-    right: 0;
+    // @include flex-center;
+    // position: absolute;
+    // top: 0;
+    // right: 0;
+    display: flex;
+    flex: 1;
+    justify-content: flex-end;
     height: 73cpx;
 
-    &__search {
-      @include flex-center;
-      width: 210cpx;
-      height: 100%;
-      padding: 28cpx 26cpx;
-      background: rgba($white-color, 0.4);
-    }
+    // &__search {
+    //   @include flex-center;
+    //   width: 210cpx;
+    //   height: 100%;
+    //   padding: 28cpx 26cpx;
+    //   background: rgba($white-color, 0.4);
+    // }
 
     &__login {
       @include flex-center;
       gap: 10cpx;
       height: 100%;
-      padding: 27cpx 40cpx 26cpx 40cpx;
+      // padding: 27cpx 40cpx 26cpx 40cpx;
+      padding: 27cpx 10cpx 26cpx;
       font-size: 18cpx;
       color: $primary-color;
       cursor: pointer;

+ 8 - 5
src/components/UpdatePwd.vue

@@ -61,7 +61,7 @@
 </template>
 
 <script lang="ts" setup>
-  import { ref, reactive } from 'vue';
+  import { ref, reactive, nextTick } from 'vue';
   import { ElMessage } from 'element-plus';
   import type { FormInstance } from 'element-plus';
   import exitIcon from 'assets/svg/exit.svg';
@@ -142,17 +142,20 @@
         startLoadingAnimation();
         userStore
           .changePassword({
-            userId: userStore.getUserInfo().id,
+            userId: userStore.getUserInfo.id,
             newPwd: md5(PWD_KEY + formValue.newPwd),
             oldPwd: md5(PWD_KEY + formValue.oldPwd),
           })
           .then(() => {
-            emit('close');
             setTimeout(() => {
               stopLoadingAndRedirect();
-            }, 20000);
+            }, 2000);
             userStore.logout();
-            router.push({ path: '/home' });
+            router.replace({ path: '/home' });
+            nextTick(() => {
+              ElMessage.success('修改密码成功');
+              emit('close');
+            });
           })
           .catch(() => {
             ElMessage.error('修改密码失败');

+ 1 - 1
src/hooks/setting/index.ts

@@ -24,7 +24,7 @@ export const useGlobSetting = (): Readonly<GlobConfig> => {
 
     drillSignUrl: VITE_GLOB_DRILL_SIGN_URL || '',
 
-    tenantCode: VITE_GLOB_TENANT_CODE,
+    // tenantCode: VITE_GLOB_TENANT_CODE,
 
     skyeyeLoginHost: VITE_GLOB_SKYEYE_LOGIN_URL,
     skyeyePlatformHost: VITE_GLOB_SKYEYE_PLATFORM_URL,

+ 12 - 11
src/views/system/user/CreateAdminDrawer.vue

@@ -1,4 +1,5 @@
 <template>
+  <!-- 该组件并未被使用 -->
   <el-drawer v-model="isDrawer" :size="width" :title="props.title" @close="handleReset">
     <el-form :model="formParams" :rules="rules" ref="formRef" label-placement="left" :label-width="80">
       <el-form-item label="登录账号" prop="username">
@@ -198,17 +199,17 @@
     });
   }
 
-  watch(
-    () => props,
-    () => {
-      if (props.isCanAddTenant && !props.isTargetTenantSys) {
-        rules!.roleIdList!.required = false;
-      }
-    },
-    {
-      immediate: true,
-    },
-  );
+  // watch(
+  //   () => props,
+  //   () => {
+  //     if (props.isCanAddTenant && !props.isTargetTenantSys) {
+  //       rules!.roleIdList!.required = false;
+  //     }
+  //   },
+  //   {
+  //     immediate: true,
+  //   },
+  // );
 
   defineExpose({
     openDrawer,

+ 48 - 17
src/views/system/user/CreateDrawer.vue

@@ -58,7 +58,7 @@
       <el-form-item v-if="isAddUser" label="密码" prop="password">
         <el-input type="password" show-password-on="mousedown" placeholder="请输入密码" v-model="formParams.password" />
       </el-form-item>
-      <el-form-item v-if="isAddUser" label="确认密码" :prop="!formParams.username ? 'passwordRe' : ''">
+      <el-form-item v-if="isAddUser" label="确认密码" prop="passwordRe">
         <el-input
           type="password"
           show-password-on="mousedown"
@@ -97,6 +97,26 @@
     TransformedTreeNode,
     removeParentheses,
   } from '@/utils/findUserByWorkNo';
+  import { checkPwdRegexp, PWD_KEY, PWD_MESSAGE } from '@/utils/pwd';
+  import md5 from 'blueimp-md5';
+
+  const validateNewPassword = (rule: any, value: string, callback: any) => {
+    if (value.length < 6) {
+      callback(new Error('密码长度不能小于6位'));
+    } else if (!checkPwdRegexp(value)) {
+      callback(new Error(PWD_MESSAGE));
+    } else {
+      callback();
+    }
+  };
+
+  const validateConfirmPassword = (rule: any, value: string, callback: any) => {
+    if (value !== formParams.value.password) {
+      callback(new Error('两次输入密码不一致'));
+    } else {
+      callback();
+    }
+  };
 
   const rules: FormRules = {
     username: {
@@ -116,16 +136,22 @@
       trigger: 'change',
       type: 'array',
     },
-    password: {
-      required: true,
-      message: '密码不能为空',
-      trigger: 'blur',
-    },
-    passwordRe: {
-      required: true,
-      message: '密码不能为空',
-      trigger: 'blur',
-    },
+    password: [
+      {
+        required: true,
+        message: '密码不能为空',
+        trigger: 'blur',
+      },
+      { validator: validateNewPassword, trigger: 'blur' },
+    ],
+    passwordRe: [
+      {
+        required: true,
+        message: '密码不能为空',
+        trigger: 'blur',
+      },
+      { validator: validateConfirmPassword, trigger: 'blur' },
+    ],
     realname: {
       required: true,
       message: '用户名不能为空',
@@ -226,7 +252,7 @@
       formParams.value.username = findUser.idtUserWorkNo;
       formParams.value.roleIdList = JSON.parse(findUser.useTypes);
       formParams.value.mobile = findUser.idtUserMobile;
-      formParams.value.deptId = findOrgCodeByWorkNo(OrganizationSourceData.value, value);
+      formParams.value.deptId = Number(findOrgCodeByWorkNo(OrganizationSourceData.value, value));
     }
   };
 
@@ -246,7 +272,7 @@
   function formSubmit() {
     formRef.value.validate((valid) => {
       if (!valid) {
-        return message.error('请填写完整信息');
+        return message.error('请填写正确完整信息');
       }
       // 克隆
       const params = cloneDeep(formParams.value);
@@ -254,11 +280,16 @@
       if (params.deptId) {
         params.deptId = params.deptId;
       }
-      if (params.password != params.passwordRe) {
-        return message.error('两次密码不一致');
-      }
-      params.staffNo = removeParentheses(params.staffNo);
+      // if (params.password != params.passwordRe) {
+      //   return message.error('两次密码不一致');
+      // }
+
+      params.password = md5(PWD_KEY + formParams.value.password);
+      params.passwordRe = '';
+
+      params.staffNo = removeParentheses(params.staffNo!);
       formParams.value.isDisabled ? (params.isDisabled = DisabledEnum.NO) : (params.isDisabled = DisabledEnum.YES);
+
       if (isAddUser.value) {
         addSingleUser(params)
           .then((res) => {

+ 0 - 73
types/config.d.ts

@@ -89,76 +89,3 @@ export interface GlobEnvConfig {
   // 天梭外链地址
   VITE_GLOB_TIANSUO_PLATFORM: string;
 }
-
-// export interface GlobConfig {
-//   title: string;
-//   apiUrl: string;
-//   shortName: string;
-//   urlPrefix: string;
-//   uploadUrl?: string;
-//   prodMock: boolean;
-//   imgUrl?: string;
-//   appDownloadUrl?: string;
-//   loginApp?: string;
-//   appPCUrl?: string;
-//   questionListVersion: string;
-//   disableDepartmentEdit?: boolean;
-//   hideReportMessageTabs?: boolean;
-//   noticeChannel: NoticeChannelAppConfig[];
-// }
-
-// export interface GlobEnvConfig {
-//   // 标题
-//   VITE_GLOB_APP_TITLE: string;
-//   // 接口地址
-//   VITE_GLOB_API_URL: string;
-//   // 接口前缀
-//   VITE_GLOB_API_URL_PREFIX?: string;
-//   // 项目简称
-//   VITE_GLOB_APP_SHORT_NAME: string;
-//   // 图片上传地址
-//   VITE_GLOB_UPLOAD_URL?: string;
-//   //图片前缀地址
-//   VITE_GLOB_IMG_URL?: string;
-//   //生产环境开启mock
-//   VITE_GLOB_PROD_MOCK: boolean;
-//   /** 下载app的url */
-//   VITE_GLOB_APP_DOWNLOAD_QRCODE: string;
-//   /** 登录地址 */
-//   VITE_GLOB_LOGIN_APP: string;
-//   /** 地球模块登录地址 */
-//   VITE_GLOB_SKYEYE_WORLD: string;
-//   /** PC模块登录地址 */
-//   VITE_GLOB_APP_PC: string;
-
-//   VITE_GLOB_TENANT_CODE: string;
-
-//   VITE_GLOB_QUESTION_LIST_VERSION: string;
-//   VITE_GLOB_DISABLE_DEPARTMENT_EDIT: boolean;
-
-//   // 是否隐藏掉平台违规报警 平台访问统计和人员访问数据的tab, 默认不隐藏
-//   VITE_GLOB_HIDE_REPORT_MESSAGE_TABS: boolean;
-
-//   // 消息管理可选择的推送渠道
-//   VITE_GLOB_NOTICE_CHANNEL: NoticeChannelAppConfig[];
-// }
-// export interface GlobConfig {
-//   // 标题
-//   title: string;
-//   // 接口地址
-//   apiUrl: string;
-//   // 图片上传地址
-//   uploadUrl?: string;
-//   // api 接口前缀
-//   urlPrefix: string;
-//   // 项目简称
-//   shortName: string;
-//   // 生产环境开启 mock
-//   prodMock: boolean;
-//   // 图片访问地址
-//   imgUrl: string | undefined;
-
-//   tenantCode: string;
-
-//   minifyImgUrl?: string;
-// }