Prechádzať zdrojové kódy

Merge branch 'dev' of http://192.168.0.115:3000/bill/4pc into dev

bill 1 rok pred
rodič
commit
053d99a4af

+ 2 - 0
src/request/URL.ts

@@ -41,6 +41,8 @@ export const getUserInfoById = `/relics/user/info/:id`;
 export const userScenepage = `/relics/user/page`;
 
 export const getMsgAuthCode = `/relics/user/getMsgAuthCode`;
+export const changePassword = `/relics/user/changePassword`
+
 
 ///drawing
 

+ 32 - 0
src/request/users.ts

@@ -1,6 +1,8 @@
 import { sendFetch, PageProps } from './index'
 import { ResPage, ResResult } from './type'
+import { encodePwd } from "@/util";
 import * as URL from "./URL";
+import { ElMessage } from "element-plus";
 
 export type UserType = {
     createBy: string
@@ -20,6 +22,7 @@ export type UserType = {
     confirmPwd?: string
     msgAuthCode?: string
     password?: string
+    phoneNum?: string
 }
 
 
@@ -52,6 +55,34 @@ export const updateUserStatusFetch = (params: Pick<UserType, 'userId' | 'status'
         method: "post",
         body: JSON.stringify(params),
     });
+
+export type ChangePasswordParam = Pick<UserType, 'confirmPwd' | 'msgAuthCode' | 'password' | 'phoneNum'>
+export const changePassword = (params: ChangePasswordParam) => {
+
+    const ent = encodePwd(params.password)
+    if (params.password !== params.confirmPwd) {
+        ElMessage.error("当前密码与密码确认不一致!");
+        return Promise.reject()
+    } else {
+        return sendFetch<ResResult>(URL.changePassword, {
+            method: "post",
+            body: JSON.stringify({
+                confirmPwd: ent,
+                password: ent,
+                msgAuthCode: params.msgAuthCode,
+                phoneNum: params.phoneNum
+            }),
+        }, {
+            useResult: true
+        });
+    }
+
+
+
+}
+
+
+
 export const getMsgAuthCode = (areaNum: string,
     phoneNum: string) =>
     sendFetch<ResResult>(URL.getMsgAuthCode, {
@@ -65,3 +96,4 @@ export const getMsgAuthCode = (areaNum: string,
     });
 
 
+

+ 12 - 10
src/view/layout/nav.vue

@@ -36,17 +36,16 @@
 <script setup lang="ts">
 import { Back } from "@element-plus/icons-vue";
 import { router } from "@/router";
-import { computed } from "vue";
+import { computed, reactive } from "vue";
 import { user, logout } from "@/store/user";
 import { errorHook } from "@/request/state";
 import lySlide from "./slide/index.vue";
 import { usersPasswordEdit } from "@/view/quisk";
 import {
-  editUserFetch,
-  UserType
-
+  UserType,
+  changePassword,
 } from "@/request";
-import { reactive } from "vue";
+
 
 const name = computed(() => router.currentRoute.value.meta?.navClass as string);
 const routeName = computed(() => router.currentRoute.value.name as string);
@@ -55,7 +54,7 @@ const logoutHandler = () => {
   router.replace({ name: "login" });
 };
 const passwordHandler = async () => {
-  console.log('passwordHandler', user)
+
   const userObj = reactive<UserType>({
     orgName: '',
     createBy: "",
@@ -72,11 +71,14 @@ const passwordHandler = async () => {
     userName: "",
     roleNames: ""
   })
+  const userinfo = {
+    ...userObj,
+    ...user.value,
+    phoneNum: user.value.userName,
+  } as any as UserType;
+  console.log('passwordHandler', userinfo)
   await usersPasswordEdit({
-    user: {
-      ...userObj,
-      ...user
-    }, submit: editUserFetch
+    user: userinfo, submit: changePassword
   });
 };
 errorHook.push((code) => {

+ 1 - 1
src/view/organization-edit.vue

@@ -38,7 +38,7 @@ const rules = reactive<FormRules>({
     { required: true, pattern: /^1[3456789]\d{9}$/, message: "请输入正确手机号", trigger: "blur" },
   ],
   password: [
-    { required: true, pattern: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$/, message: "请输入8-16位数字、字母大小写组合", trigger: "blur" },
+    { required: true, pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\s\S]{8,16}$/, message: "请输入8-16位数字、字母大小写组合", trigger: "blur" },
     { required: true, min: 8, message: '密码太短!', trigger: "blur" },
   ],
 },)

+ 90 - 53
src/view/users-password-edit.vue

@@ -6,7 +6,8 @@
     </el-form-item>
     <el-form-item label="验证码" prop="msgAuthCode" required>
       <el-input v-model="data.msgAuthCode" style="width: 190px" :maxlength="500" placeholder="请输入" />
-      <el-button type="danger" style="margin-left: 10px" @click="getMsgCode">获取验证码</el-button>
+      <el-button :loading="checkCodeBtn.loading" :disabled="checkCodeBtn.disabled" type="danger"
+        style="margin-left: 10px" @click="getCheckCode"> {{ checkCodeBtn.text }}</el-button>
     </el-form-item>
     <el-form-item label="密码" prop="password" required>
       <el-input autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" v-model="data.password"
@@ -49,48 +50,23 @@
 import { QuiskExpose } from "@/helper/mount";
 import { ElMessage, type FormInstance, type FormRules } from "element-plus";
 import { View, Hide } from '@element-plus/icons-vue';
-import type { OrganizationType } from '@/request/organization'
+// import type { OrganizationType } from '@/request/organization'
 import {
-  getOrgListFetch,
+  // getOrgListFetch,
   getMsgAuthCode,
-  UserType
+  UserType,
+  ChangePasswordParam
 } from "@/request";
 
 import { ref, reactive, unref, onMounted, watchEffect } from "vue";
+import { onUnmounted } from "vue";
 const addPassFlag = ref(false)//图标显示标识
 
 const baseFormRef = ref<FormInstance>();
 
-type SelectType = {
-  value: string, id: number
-}
-
-const allOrgs = ref<SelectType[]>([]);
-
-
-const rules = reactive<FormRules>({
-
-
-  userName: [
-    { required: true, message: "请输入账号", trigger: "blur" },
-  ],
-  msgAuthCode: [
-    { required: true, message: "请输入验证码", trigger: "change" },
-  ],
-
-  password: [
-    { required: true, pattern: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$/, message: "请输入8-16位数字、字母大小写组合", trigger: "blur" },
-    { required: true, min: 8, message: '密码太短!', trigger: "blur" },
-  ],
-  confirmPwd: [
-    { required: true, pattern: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$/, message: "请输入8-16位数字、字母大小写组合", trigger: "blur" },
-    { required: true, min: 8, message: '密码太短!', trigger: "blur" },
-  ]
-},)
-
 const props = defineProps<{
   user: UserType,
-  submit: (data: UserType) => Promise<any>;
+  submit: (data: ChangePasswordParam) => Promise<any>;
 }>();
 const data = ref<UserType>({
   nickName: "",
@@ -111,20 +87,64 @@ const data = ref<UserType>({
   userId: 0,
   roleNames: ""
 });
-const isDisableMsg = ref(false)
+
+
+const equalToPassword = (_, value: any, callback: any) => {
+  if (data.value.password !== value) {
+    callback(new Error("两次输入的密码不一致"));
+  } else {
+    callback();
+  }
+};
+
+const rules = reactive<FormRules>({
+
+
+  userName: [
+    { required: true, message: "请输入账号", trigger: "blur" },
+  ],
+  msgAuthCode: [
+    { required: true, message: "请输入验证码", trigger: "change" },
+  ],
+
+  password: [
+    { required: true, pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\s\S]{8,16}$/, message: "请输入8-16位数字、字母大小写组合", trigger: "blur" },
+    { required: true, min: 8, message: '密码太短!', trigger: "blur" },
+  ],
+  confirmPwd: [
+    { required: true, pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\s\S]{8,16}$/, message: "请输入8-16位数字、字母大小写组合", trigger: "blur" },
+    { required: true, min: 8, message: '密码太短!', trigger: "blur" },
+    { required: true, validator: equalToPassword, trigger: "blur" }
+
+  ]
+},)
+
+
+let checkCodeBtn = reactive<any>({
+  text: '获取验证码',
+  loading: false,
+  disabled: false,
+  duration: 60,
+  timer: null
+})
 
 onMounted(async () => {
-  const data = await getOrgListFetch({
-    pageNum: 1,
-    pageSize: 10000,
-  })
-  // console.log('allOrgs', data.records);
-  allOrgs.value = Array.from(data.records).map((item: OrganizationType) => {
-    const i: SelectType = { value: item['orgName'], id: item['orgId'] }
-    return i
-  });
+  // const data = await getOrgListFetch({
+  //   pageNum: 1,
+  //   pageSize: 10000,
+  // })
+  // // console.log('allOrgs', data.records);
+  // allOrgs.value = Array.from(data.records).map((item: OrganizationType) => {
+  //   const i: SelectType = { value: item['orgName'], id: item['orgId'] }
+  //   return i
+  // });
 
 })
+onUnmounted(() => {
+  // 清除掉定时器
+  checkCodeBtn.timer && clearInterval(checkCodeBtn.timer)
+})
+
 
 // const setParentId = () => {
 //   if (user.value) {
@@ -135,23 +155,40 @@ onMounted(async () => {
 watchEffect(() => {
   if (props.user) {
     data.value = { ...props.user }
+    console.log('data', data)
   }
 })
-
-const getMsgCode = async () => {
-  const res = await getMsgAuthCode('+86', "13750087092")
-  console.log('res', res)
-  let timer = null
+const getCheckCode = async () => {
+  // 倒计时期间按钮不能单击
+  const phoneNum = data.value.userName
+  console.log('getMsgCode', phoneNum)
+  const res = await getMsgAuthCode('+86', phoneNum)
   if (res.success) {
-    timer && clearTimeout(timer)
-    isDisableMsg.value = true
-    timer = setTimeout(() => {
-      isDisableMsg.value = false
-    }, 60 * 1000)
+    ElMessage.success(res.data);
   }
-
+  if (checkCodeBtn.duration == 60) {
+    checkCodeBtn.disabled = true
+  }
+  // 清除掉定时器
+  checkCodeBtn.timer && clearInterval(checkCodeBtn.timer)
+  // 开启定时器
+  checkCodeBtn.timer = setInterval(() => {
+    const tmp = checkCodeBtn.duration--
+    checkCodeBtn.text = `${tmp}秒`
+    if (tmp <= 0) {
+      // 清除掉定时器
+      clearInterval(checkCodeBtn.timer)
+      checkCodeBtn.duration = 60
+      checkCodeBtn.text = '重新获取'
+      // 设置按钮可以单击
+      checkCodeBtn.disabled = false
+    }
+    console.info(checkCodeBtn.duration)
+  }, 1000)
 }
 
+
+
 // const handleSelect = (orgId: number) => {
 //   const item = Array.from(allOrgs.value).find(i => i.id === orgId)
 //   if (item) {