瀏覽代碼

feat: save

gemercheung 1 年之前
父節點
當前提交
b9b9f881db
共有 4 個文件被更改,包括 150 次插入47 次删除
  1. 2 0
      src/request/urls.ts
  2. 10 3
      src/store/user.ts
  3. 82 29
      src/view/system/updatePsw.vue
  4. 56 15
      src/view/user/index.vue

+ 2 - 0
src/request/urls.ts

@@ -18,6 +18,8 @@ export const userReg = "/web/user/register";
 export const sendUserMsg = "/fusion-xj/notAuth/getMsgAuthCode";
 // 修改密码
 export const updatePsw = "/fusion-xj/notAuth/changePassword";
+// 重置密码
+export const restPassword = "/fusion-xj/notAuth/restPassword";
 // 新增用户
 export const userAdd = "/fusion-xj/web/user/addUser";
 //修改用户

+ 10 - 3
src/store/user.ts

@@ -12,6 +12,7 @@ import {
   sendUserMsg,
   setAuthHook,
   updatePsw,
+  restPassword,
   userAdd,
   userEdit,
   userLogout,
@@ -60,12 +61,13 @@ export const logout = async () => {
   user.value.info = {} as any;
 };
 
-type UpdataPassowrdParams = {
+type UpDataPasswordParams = {
   userName: string;
-  code: string;
+  // code: string;
+  oldPassword: string;
   password: string;
 };
-export const updatePassword = async (params: UpdataPassowrdParams) => {
+export const updatePassword = async (params: UpDataPasswordParams) => {
   const password = encodePwd(params.password);
   await axios.post(updatePsw, {
     ...params,
@@ -73,6 +75,11 @@ export const updatePassword = async (params: UpdataPassowrdParams) => {
     confirmPwd: password,
   });
 };
+export const resetPassword = async (params: Pick<UpDataPasswordParams, 'userName'>) => {
+  await axios.post(restPassword, {
+    ...params,
+  });
+};
 
 type RegisterParams = Pick<
   UserInfo,

+ 82 - 29
src/view/system/updatePsw.vue

@@ -6,41 +6,91 @@
     </div>
 
     <el-form-item label="手机号:" class="mandatory">
-      <el-input v-model="data.phone" placeholder="请输入手机号码" disabled></el-input>
+      <el-input
+        v-model="data.phone"
+        placeholder="请输入手机号码"
+        disabled
+      ></el-input>
     </el-form-item>
     <el-form-item label="旧密码:" class="mandatory">
-      <el-input v-model="data.code" placeholder="请输入">
-        <!-- <template v-slot:suffix>
-          <el-button
-            type="primary"
-            plain
-            class="input-inner-btn"
-            @click="sendCode"
-            :disabled="msgStatus && msgStatus.status !== CountdownStuts.never"
-          >
-            {{
-              msgStatus?.status === CountdownStuts.effective
-                ? `${msgStatus.miss}S后可重新发送`
-                : "获取验证码"
-            }}
-          </el-button>
-        </template> -->
+      <!-- <el-input v-model="data.oldPassword" placeholder="请输入旧密码"> </el-input> -->
+      <el-input
+        autocomplete="off"
+        readonly
+        onfocus="this.removeAttribute('readonly');"
+        v-model="data.oldPassword"
+        :type="addPassoldFlag ? 'text' : 'password'"
+        :maxlength="16"
+        placeholder="请输入旧密码"
+      >
+        <template #suffix>
+          <span @click="addPassoldFlag = !addPassoldFlag" style="cursor: pointer">
+            <el-icon v-if="addPassoldFlag">
+              <View />
+            </el-icon>
+            <el-icon v-else>
+              <Hide />
+            </el-icon>
+          </span>
+        </template>
       </el-input>
+
     </el-form-item>
     <el-form-item label="新密码:" class="mandatory">
-      <el-input
+      <!-- <el-input
         v-model="data.password"
         type="password"
         :maxlength="16"
         placeholder="请输入8-16位数字、英文大小写组合"
-      ></el-input>
+      >
+    </el-input> -->
+      <el-input
+        autocomplete="off"
+        readonly
+        onfocus="this.removeAttribute('readonly');"
+        v-model="data.password"
+        :type="addPassFlag ? 'text' : 'password'"
+        :maxlength="16"
+        placeholder="请输入8-16位数字、字母大小写组合"
+      >
+        <template #suffix>
+          <span @click="addPassFlag = !addPassFlag" style="cursor: pointer">
+            <el-icon v-if="addPassFlag">
+              <View />
+            </el-icon>
+            <el-icon v-else>
+              <Hide />
+            </el-icon>
+          </span>
+        </template>
+      </el-input>
     </el-form-item>
     <el-form-item label="密码确认:" class="mandatory">
-      <el-input
+      <!-- <el-input
         v-model="data.confimPsw"
         type="password"
         placeholder="请输入8-16位数字、英文大小写组合"
-      ></el-input>
+      ></el-input> -->
+      <el-input
+        autocomplete="off"
+        readonly
+        onfocus="this.removeAttribute('readonly');"
+        v-model="data.confimPsw"
+        :type="addPassPwFlag ? 'text' : 'password'"
+        :maxlength="16"
+        placeholder="请输入8-16位数字、字母大小写组合"
+      >
+        <template #suffix>
+          <span @click="addPassPwFlag = !addPassPwFlag" style="cursor: pointer">
+            <el-icon v-if="addPassPwFlag">
+              <View />
+            </el-icon>
+            <el-icon v-else>
+              <Hide />
+            </el-icon>
+          </span>
+        </template>
+      </el-input>
     </el-form-item>
   </el-form>
 </template>
@@ -58,13 +108,15 @@ import {
 import { ref, reactive } from "vue";
 import { PSW } from "@/constant/REG";
 import { QuiskExpose } from "@/helper/mount";
-
+const addPassoldFlag = ref(false);
+const addPassFlag = ref(false);
+const addPassPwFlag = ref(false);
 const data = ref({
   oldPassword: "",
   password: "",
   confimPsw: "",
   phone: user.value.info.userName,
-  code: "",
+  // code: "",
 });
 const msgStatus = ref<CountdownStore>();
 const sendCode = async () => {
@@ -81,17 +133,18 @@ defineExpose<QuiskExpose>({
       openErrorMsg(PSW.tip);
       throw PSW.tip;
     }
-    if (!data.value.code || !data.value.code.trim()) {
-      openErrorMsg("请输入验证码");
-      throw "请输入验证码";
-    }
+    // if (!data.value.code || !data.value.code.trim()) {
+    //   openErrorMsg("请输入验证码");
+    //   throw "请输入验证码";
+    // }
 
     await updatePassword({
       userName: data.value.phone,
-      code: data.value.code,
+      // code: data.value.code,
+      oldPassword: data.value.oldPassword,
       password: data.value.password,
     });
-    data.value.oldPassword = data.value.password = data.value.confimPsw = "";
+    // data.value.oldPassword = data.value.password = data.value.confimPsw = "";
   },
 });
 </script>

+ 56 - 15
src/view/user/index.vue

@@ -5,10 +5,16 @@
         <com-company v-model="state.query.deptId" />
       </el-form-item>
       <el-form-item label="用户账号:">
-        <el-input v-model="state.query.userName" placeholder="请输入手机号"></el-input>
+        <el-input
+          v-model="state.query.userName"
+          placeholder="请输入手机号"
+        ></el-input>
       </el-form-item>
       <el-form-item label="用户姓名:">
-        <el-input v-model="state.query.nickName" placeholder="请输入"></el-input>
+        <el-input
+          v-model="state.query.nickName"
+          placeholder="请输入"
+        ></el-input>
       </el-form-item>
       <el-form-item label="状态:">
         <el-select v-model="state.query.status" placeholder="全部">
@@ -27,7 +33,9 @@
 
   <div class="body-layer" style="padding-top: 8px">
     <div class="body-but">
-      <el-button type="primary" v-pdpath="'add'" @click="addHandler">新增用户</el-button>
+      <el-button type="primary" v-pdpath="'add'" @click="addHandler"
+        >新增用户</el-button
+      >
     </div>
 
     <el-table
@@ -41,7 +49,10 @@
           {{ state.pag.size * (state.pag.currentPage - 1) + $index + 1 }}
         </div>
       </el-table-column>
-      <el-table-column label="用户账号(手机号)" prop="userName"></el-table-column>
+      <el-table-column
+        label="用户账号(手机号)"
+        prop="userName"
+      ></el-table-column>
       <el-table-column label="用户姓名" prop="nickName"></el-table-column>
       <el-table-column label="所属架构" prop="deptName"></el-table-column>
       <el-table-column label="角色" prop="roleName"></el-table-column>
@@ -51,6 +62,12 @@
       <el-table-column label="操作" v-slot:default="{ row }">
         <span
           class="oper-span"
+          :class="{ disable: user.info.id == row.id }"
+          @click="resetHandler(row)"
+          >重置密码</span
+        >
+        <span
+          class="oper-span"
           v-pdpath="['edit']"
           :class="{ disable: row.type === 0 }"
           @click="editHandler(row)"
@@ -90,20 +107,28 @@ import { usePagging } from "@/hook/pagging";
 import comHead from "@/components/head/index.vue";
 import comCompany from "@/components/company-select/index.vue";
 import comPagination from "@/components/pagination/index.vue";
-import { UserInfo, changeUserStatus, delUser, getUserPagging, user } from "@/store/user";
-import { ElMessage } from "element-plus";
+import {
+  UserInfo,
+  changeUserStatus,
+  delUser,
+  getUserPagging,
+  user,
+  resetPassword,
+} from "@/store/user";
+import { ElMessage, ElMessageBox } from "element-plus";
 import { confirm } from "@/helper/message";
 import { addUser, editUser } from "./quisk";
 
-const { state, queryReset, refresh, changPageCurrent, changPageSize } = usePagging({
-  get: getUserPagging,
-  paramsTemlate: {
-    nickName: "",
-    status: "" as any,
-    deptId: "",
-    userName: "",
-  },
-});
+const { state, queryReset, refresh, changPageCurrent, changPageSize } =
+  usePagging({
+    get: getUserPagging,
+    paramsTemlate: {
+      nickName: "",
+      status: "" as any,
+      deptId: "",
+      userName: "",
+    },
+  });
 
 const delInfo = async (row: UserInfo) => {
   if (
@@ -121,6 +146,22 @@ const addHandler = async () => {
   (await addUser({})) && refresh();
 };
 
+const resetHandler = async (row: UserInfo) => {
+  await resetPassword({
+    userName: row.userName,
+  });
+
+  await ElMessageBox.confirm(
+    "当前用户密码已重置为 xj12345678用户可登录自行修改。",
+    "重置密码",
+    {
+      confirmButtonText: "确定",
+      cancelButtonText: "取消",
+      type: "warning",
+    }
+  );
+};
+
 const editHandler = async (row: UserInfo) => {
   if (!row.status) {
     return ElMessage.error("请先启用用户");