Przeglądaj źródła

Merge remote-tracking branch 'origin/test' into wuguojie

wuguojie 1 rok temu
rodzic
commit
b48491d5a0

+ 14 - 1
src/api/modules/role.ts

@@ -9,16 +9,29 @@ interface roleData {
 interface roleList {
   pageNum: number;
   pageSize: number;
+  name?:string,
+}
+interface roleDelete{
+  id:string,
+}
+interface roleDeleteValid{
+  systemCode:string,
+  id:string,
 }
 const roleApi = (axiosInstance: ApiInstance) => ({
   // 新增角色
   roleAdd: (data: roleData) => axiosInstance.post('userRole/roleAdd', data, {}),
-  // 新增角色
+  // 修改
   roleUpdate: (data: roleData) => axiosInstance.post('userRole/roleUpdate', data, {}),
   //角色列表
   roleList: (data: roleList) => axiosInstance.post('userRole/roleList ', data, {}),
   //详情
   roleGet: (params: Record<string, any>) => axiosInstance.get('userRole/roleGet', { params }),
+  //删除角色
+  roleDelete: (data: roleDelete) => axiosInstance.post('userRole/roleDelete', data, {}),
+  //角色删除校验接口
+  roleDeleteValid: (data: roleDeleteValid) => axiosInstance.post('userRole/roleDeleteValid', data, {}),
+
 
 })
 

BIN
src/assets/images/decoration1.png


+ 17 - 3
src/components/LoginForm/index.vue

@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import type { FormInstance, FormRules } from 'element-plus'
 import useUserStore from '@/store/modules/user'
-import { ref, useTemplateRef, onMounted } from 'vue'
+import { ref, useTemplateRef, onMounted,onUnmounted } from 'vue'
 
 defineOptions({
   name: 'LoginForm',
@@ -51,7 +51,11 @@ const rules = ref<FormRules>({
   ],
 })
 onMounted(() => {
-  refreshCaptcha()
+  refreshCaptcha();
+  window.addEventListener('keydown', handleEnter)
+});
+onUnmounted(() => {
+  window.removeEventListener('keydown', handleEnter, false)
 })
 //获取验证码接口
 function refreshCaptcha() {
@@ -64,6 +68,14 @@ function refreshCaptcha() {
     randnum;
   form.value.captchaId = randnum;
 }
+function handleEnter (e:any) {
+  // console.log(e)
+  // console.log(e)
+  if (e.keyCode == 13 || e.keyCode == 108) {
+    //登录接口逻辑
+    handleLogin()
+  }
+}
 function handleLogin() {
   formRef.value?.validate((valid) => {
     if (valid) {
@@ -184,7 +196,9 @@ function handleLogin() {
           忘记密码
         </ElLink>
       </div>
-      <ElButton class="loginCSS" :loading="loading" type="primary"  style="width: 100%;" @click.prevent="handleLogin">
+      <ElButton class="loginCSS" :loading="loading" type="primary" 
+      @keydown.enter="handleEnter"
+      style="width: 100%;" @click.prevent="handleLogin">
         登录
       </ElButton>
       <!-- <div class="mt-4 flex-center gap-2 text-sm color-[var(--el-text-color-secondary)]">

+ 4 - 1
src/layouts/components/Header/index.vue

@@ -61,7 +61,7 @@ function handlerMouserScroll(event: WheelEvent) {
   </Transition>
 </template>
 
-<style scoped>
+<style lang="scss" scoped>
 header {
   position: fixed;
   top: 0;
@@ -113,6 +113,9 @@ header {
       height: 100%;
       padding: 0 20px;
       overflow-x: auto;
+      background-image: url("../../../assets/images/decoration1.png");
+      background-repeat: no-repeat; /* 防止背景图片重复 */
+      background-position: center; /* 将背景图片居中 */
       mask-image: linear-gradient(to right, transparent, #000 20px, #000 calc(100% - 20px), transparent);
 
       .menu {

+ 0 - 2
src/types/components.d.ts

@@ -8,7 +8,6 @@ export {}
 declare module 'vue' {
   export interface GlobalComponents {
     Auth: typeof import('./../components/Auth/index.vue')['default']
-    ELPagination: typeof import('./../components/ELPagination/index.vue')['default']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
     FixedActionBar: typeof import('./../components/FixedActionBar/index.vue')['default']
     HButton: typeof import('./../layouts/ui-kit/HButton.vue')['default']
@@ -30,7 +29,6 @@ declare module 'vue' {
     NotAllowed: typeof import('./../components/NotAllowed/index.vue')['default']
     PageHeader: typeof import('./../components/PageHeader/index.vue')['default']
     PageMain: typeof import('./../components/PageMain/index.vue')['default']
-    Pagination: typeof import('./../components/Pagination/index.vue')['default']
     PaginationWrapper: typeof import('./../components/PaginationWrapper/index.vue')['default']
     PcasCascader: typeof import('./../components/PcasCascader/index.vue')['default']
     RegisterForm: typeof import('./../components/RegisterForm/index.vue')['default']

+ 53 - 9
src/views/personnel/roleManagement.vue

@@ -12,12 +12,12 @@
               </ElInput>
             </ElCol>
             <ElCol :md="6">
-              <ElButton type="primary">查找</ElButton>
+              <ElButton type="primary" @click="rolequery">查找</ElButton>
             </ElCol>
           </ElFormItem>
           <div style="height: 500px;overflow-y: auto;">
             <div class="pad-2 roleitem flex f-c " v-for="(item, index) in roleList" :key="index"
-              @click="roleitemClick(item.id)">
+              @click="roleitemClick(item)">
               <span>{{ item.name }}</span>
               <span style="margin-top: 10px;font-size: 12px;color: #999;">{{ item.remark }}</span>
             </div>
@@ -33,6 +33,7 @@
               <span class="strong">角色管理</span>
               <div>
                 <ElButton type="primary" @click="roleSubmit">提交</ElButton>
+                <ElButton v-if="roleInfo.id" type="danger" @click="roleDelClick">删除</ElButton>
               </div>
             </div>
           </template>
@@ -65,7 +66,7 @@
 <script lang='ts' setup>
 import { asyncRoutes } from '@/router/routes' // 请根据实际路径调整
 import { ref, reactive, onBeforeMount } from 'vue';
-import type { FormRules, ElTree } from 'element-plus';
+import { FormRules, ElTree, ElMessage, ElMessageBox  } from 'element-plus';
 import { preprocessRoutes, convertToTreeData, TreeNode } from '@/utils/composables/routeUtils'; // 导入工具方法
 import api from '@/api'
 import Message from 'vue-m-message'
@@ -87,6 +88,8 @@ interface Perm {
 }
 const treeRef = ref<InstanceType<typeof ElTree>>();
 const roleName = ref<string>("");
+const roleId = ref<string>("");
+
 const PageNum = ref<number>(1);
 const PageSize = ref<number>(20);
 const checkedKeys = ref<string[]>([])
@@ -139,15 +142,18 @@ async function roleSubmit() {
     await api.roleApi.roleUpdate(roleInfo).then((res: any) => {
       if (res.code == 200) {
         rolequery();
-        Message.success(res.msg, {
-          zIndex: 2000,
+        ElMessage({
+          type: 'success',
+          message: res.msg,
+          plain: true,
+
         })
         resetForm();
       }
 
     })
   } else {
-    await api.roleApi.roleAdd(roleInfo).then((res:any) => {
+    await api.roleApi.roleAdd(roleInfo).then((res: any) => {
       if (res.code == 200) {
         rolequery();
         Message.success(res.msg, {
@@ -158,6 +164,43 @@ async function roleSubmit() {
     })
   }
 
+}
+function roleDelClick() {
+  api.roleApi.roleDeleteValid({ systemCode: roleInfo.system, id: roleId.value }).then((res: any) => {
+    if (res.code == 200) {
+      ElMessageBox.confirm(
+        '确定要删除该角色吗?',
+        '删除角色',
+        {
+          confirmButtonText: '确认删除',
+          cancelButtonText: '取消',
+          type: 'error',
+          draggable: true,
+        }
+      )
+        .then(async () => {
+          await api.roleApi.roleDelete({ id: roleId.value }).then((res: any) => {
+            if (res.code == 200) {
+              rolequery();
+              Message.success(res.msg, {
+                zIndex: 2000,
+              })
+              resetForm();
+            }
+          })
+        })
+        .catch(() => {
+
+        })
+    } else {
+      ElMessageBox.alert('删除角色前,请先移除角色内的所有成员', '无法删除', {
+        confirmButtonText: '知道了',
+
+      })
+    }
+  })
+
+
 }
 function pageChange(e: number) {
   PageNum.value = e;
@@ -166,8 +209,8 @@ function pageChange(e: number) {
 function sizeChange(val: number) {
   PageSize.value = val;
 }
-function roleitemClick(id: string) {
-  api.roleApi.roleGet({ roleId: id }).then((res: any) => {
+async function roleitemClick(item: { id: string }) {
+  await api.roleApi.roleGet({ roleId: item.id }).then((res: any) => {
     if (res.code === 200) {
       checkedKeys.value = res.data.perms.map((val: Perm) => val.id);
       roleInfo.permsId = res.data.perms.map((val: Perm) => val.id);
@@ -175,11 +218,12 @@ function roleitemClick(id: string) {
       roleInfo.name = res.data.name;
       roleInfo.remark = res.data.remark;
       roleInfo.id = res.data.id;
+      roleId.value = res.data.id;
     }
   })
 }
 async function rolequery() {
-  await api.roleApi.roleList({ pageNum: PageNum.value, pageSize: PageSize.value }).then((res: any) => {
+  await api.roleApi.roleList({ pageNum: PageNum.value, pageSize: PageSize.value, name: roleName.value }).then((res: any) => {
     totalSize.value = res.data.total;
     roleList.value = res.data.records;
   })