Переглянути джерело

重置密码添加&样式修改

zhangguohua 1 рік тому
батько
коміт
502f3e1061

+ 1 - 0
index.html

@@ -3,6 +3,7 @@
   <head>
     <meta charset="UTF-8" />
     <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
+    <link rel="stylesheet" href="https://at.alicdn.com/t/c/font_4940871_gvio3tkxpb.css">
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>慧教研后台管理系统</title>
   </head>

+ 8 - 0
src/api/manager.ts

@@ -30,4 +30,12 @@ export function deleteManager(data: any) {
     method: 'delete',
     data
   })
+}
+// 重置密码
+export function resetPassWord(id: any, data: any) {
+  return request({
+    url: `/adminApi/v1/sys/users/${id}/password`,
+    method: 'put',
+    data
+  })
 }

+ 8 - 0
src/api/school.ts

@@ -119,4 +119,12 @@ export function deleteSubject(data: any) {
     method: 'delete',
     data
   })
+}
+// 免密登录
+export function loginTeach(data: any) {
+  return request({
+    url: `/adminApi/v1/admin_login_teach`,
+    method: 'post',
+    data
+  })
 }

+ 54 - 12
src/components/resetPassword.vue

@@ -1,7 +1,6 @@
 <template>
-  <el-dialog v-model="dialogData.dialogShow" title="重置密码" width="450px"> 
-     <!-- :rules="editPassWordDataRules"   ref="editPassWordData"-->
-    <el-form :model="editPassWordData" label-width="90px">
+  <el-dialog v-model="dialogData.dialogShow" title="重置密码" width="480px">
+    <el-form :model="editPassWordData" :rules="editPassWordDataRules" ref="editPassWordForm" label-width="120px">
       <el-form-item :label="dialogData.label+ ':'" prop="name" >
         <el-input :value="dialogData.name" disabled/>
       </el-form-item>
@@ -11,19 +10,19 @@
           <el-radio value="1">重置为默认密码</el-radio>
         </el-radio-group>
       </el-form-item>
-      <el-form-item label="新密码:" v-if="editPassWordData.useDefault=='0'">
-        <el-input v-model="editPassWordData.randomPassword" />
+      <el-form-item label="新密码:" v-if="editPassWordData.useDefault=='0'" prop="randomPassword">
+        <el-input v-model="editPassWordData.randomPassword" placeholder="请输入密码" />
       </el-form-item>
       <el-form-item label="默认密码:" v-if="editPassWordData.useDefault=='1'">
         <div class="default_pass">
-          <el-input value="******" disabled/>
-          <p>默认密码:{{ dialogData.remark }}</p>
+          <el-input value="******" disabled />
+          <p class="default_pass">默认密码:{{ dialogData.remark }}</p>
         </div>
       </el-form-item>
     </el-form>
     <template #footer>
       <el-button @click="dialogData.dialogShow = false">取 消</el-button>
-      <el-button type="primary" @click="confirmPassWord">确 定</el-button>
+      <el-button type="primary" :loading="submitLoading" @click="confirmPassWord(editPassWordForm)">确 定</el-button>
     </template>
   </el-dialog>
 </template>
@@ -35,6 +34,9 @@ export default {
 </script>
 <script lang="ts" setup>
 import { ref, reactive, onMounted, watch, inject } from 'vue'
+import type { FormInstance, FormRules } from 'element-plus'
+import { ElMessage } from 'element-plus'
+import { resetPassWord } from '@/api/manager'
 interface DialogData {
   dialogShow: boolean
   name: string,
@@ -51,13 +53,53 @@ const editPassWordData = reactive<EditPassWordData>({
   useDefault: '1',
   randomPassword: '',
 })
+const submitLoading = ref(false)
+const editPassWordForm = ref<FormInstance>()
+const editPassWordDataRules = reactive<FormRules<EditPassWordData>>({
+  randomPassword: [
+    { required: true, message: '请输入密码', trigger: 'blur' },
+    { min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' },
+  ],
+})
 onMounted(() => {
   
 })
-const confirmPassWord = () => {
-
+const confirmPassWord = async (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  await formEl.validate(async(valid, fields) => {
+    if (valid) {
+      submitLoading.value = true
+      try {
+        const res = await resetPassWord(dialogData.id, { 
+          randomPassword: editPassWordData.useDefault == '1' ? '' : editPassWordData.randomPassword 
+        })
+        if (res.code == 200) {
+          ElMessage.success(res.msg)
+          editPassWordForm.value.resetFields()
+          dialogData.dialogShow = false
+        } else {
+          ElMessage.error(res.msg)
+        }
+      }catch {}finally {
+        submitLoading.value = false
+      }
+    }
+  })
 }
 </script>  
-<style>
-
+<style lang="scss" scoped>
+.el-form ::v-deep {
+  .el-form-item__label {
+    font-size: 16px;
+  }
+  .el-radio__label {
+    font-size: 16px;
+  }
+  .el-input {
+    width: 240px;
+  }
+}
+.default_pass {
+  font-size: 12px;
+}
 </style>

+ 88 - 53
src/layout/components/SiderBar.vue

@@ -1,74 +1,66 @@
 <template>
   <el-aside class="siderbar_container" :width="isCollapse ? '72px' : '150px'">
-    <div @click="toggleCollapse">
+    <div @click="toggleCollapse" class="collapse_box">
       <img v-if="isCollapse" src="@/assets/icon/open.svg" alt="">
       <img v-else src="@/assets/icon/close.svg" alt="">
     </div>
     <el-menu :collapse="isCollapse" router @handleOpen="handleOpen" @handleClose="handleClose">
-      <el-menu-item v-for="item in menuItems" :key="item.route" :index="item.route">
+      <el-menu-item v-for="item in menuItems" :key="item.route" :index="item.route" :class="activeRoute == item.route ? 'is-active' : ''" >
+        <template #default>
+          <i class="iconfont" :class="`icon-${item.icon}`"></i>
+          <span v-if="!isCollapse">{{ item.label }}</span>
+        </template>
         <template #title>
-          <!-- <img :src="`@/assets/icon/${item.icon}.svg`" alt=""> -->
-          <img src="`@/assets/icon/manage_normal.svg`" alt="">
-          <span>{{ item.label }}</span>
+          <span v-if="isCollapse">{{ item.label }}</span>
         </template>
       </el-menu-item>
     </el-menu>
   </el-aside>
 </template>
-
-<script> 
-import { ref } from 'vue';
+<script lang="ts">
 export default {
-  name: 'SiderBar',
-  components: {
+  name: 'SiderBar'
+}
+</script>
+<script lang="ts" setup> 
+import { ref, watch } from 'vue';
+import { useRoute } from 'vue-router'
+
+const route = useRoute()
+const activeRoute = ref(route.path)
+watch(() => route.path, (newVal) => {
+  activeRoute.value = newVal
+})
+const isCollapse = ref(false)
+const menuItems = ref([
+  {
+    label: '学校管理',
+    icon: 'school_normal',
+    route: '/main/school',
   },
-  setup() {
-    const isCollapse = ref(false)
-    const menuItems = ref([
-      {
-        label: '学校管理',
-        icon: 'school_normal',
-        icon_light: 'school_light',
-        icon_hover: 'school_hover',
-        route: '/main/school',
-      },
-      {
-        label: '运维管理',
-        icon: 'manage_normal',
-        icon_light: 'school_light',
-        icon_hover: 'school_hover',
-        route: '/main/manager',
-      },
-      {
-        label: '联考管理',
-        icon: 'join_exam_normal',
-        icon_light: 'join_exam_light',
-        icon_hover: 'join_exam_hover',
-        route: '/main/examination',
-      }
-    ])
-    const handleOpen = (key, keyPath) => {
-      console.log(key, keyPath)
-    }
-    const handleClose = (key, keyPath) => {
-      console.log(key, keyPath)
-    }
-    const toggleCollapse = () => {
-      isCollapse.value = !isCollapse.value
-    }
-    return {
-      isCollapse,
-      menuItems,
-      handleOpen,
-      handleClose,
-      toggleCollapse,
-      
-    }
+  {
+    label: '运维管理',
+    icon: 'manage_normal',
+    route: '/main/manager',
+  },
+  {
+    label: '联考管理',
+    icon: 'school_normal',
+    route: '/main/examination',
   }
+])
+const handleOpen = (key, keyPath) => {
+  console.log(key, keyPath)
+}
+const handleClose = (key, keyPath) => {
+  console.log(key, keyPath)
+}
+const toggleCollapse = () => {
+  isCollapse.value = !isCollapse.value
 }
 </script>
 
-<style scoped>
+<style lang="scss" scoped>
 .siderbar_container {
   background: #fff;
   padding: 16px;
@@ -80,4 +72,47 @@ export default {
 .el-menu-item {
   padding: 0;
 }
+.iconfont {
+  margin-right: 5px;
+  display: inline-block;
+  color: #666666;
+  font-size: 20px;
+}
+.collapse_box {
+  padding-left: 10px;
+  // text-align: center;
+}
+.el-menu.el-menu--vertical ::v-deep(.el-menu-item) {
+  height: 40px;
+  margin: 10px 0;
+  padding: 0 10px;
+  border-radius: 4px;
+  .iconfont {
+    margin-right: 8px;
+    text-align: center;
+  }
+}
+.el-menu--collapse .el-menu-item span {
+  display: none;
+}
+.el-menu-item ::v-deep(.el-menu-tooltip__trigger) {
+  padding: 0 10px;
+}
+.el-menu-item {
+  &.is-active,
+  &.is-active:hover {
+    background: #2E64FA;
+    color: #fff;
+    .iconfont {
+      color: #fff;
+    }
+  }
+  &:not(.is-active):hover {
+    background: inherit;
+    color: #2E64FA;
+    .iconfont {
+      color: #2E64FA;
+    }
+  }
+}
 </style>

+ 4 - 1
src/views/school/index.vue

@@ -96,7 +96,7 @@
                   <div class="button_editor" @click="EditUser(row)">编辑</div>
                   <div class="button_editor" @click="OpenAuth(row)">权限</div>
                   <div class="button_editor">重置密码</div>
-                  <div class="button_editor">进入学校</div>
+                  <div class="button_editor" @click="GoTeach">进入学校</div>
                 </div>
               </template>
             </el-table-column>
@@ -257,6 +257,9 @@ const ChangeStatus = (row) => {
     }
   })
 }
+const GoTeach = () => {
+  console.log('GoTeach')
+}
 </script>
 
 <style lang="scss" scoped>