20 changed files with 768 additions and 300 deletions
			
			
		@ -0,0 +1,7 @@ | 
				
			|||||||
 | 
					import request from '@/config/axios' | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 推送maxkb知识库
 | 
				
			||||||
 | 
					export const pushWeb = async (data:any) => { | 
				
			||||||
 | 
					  return await request.post({ url: '/system/maxkb/pushWeb',data }) | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,138 @@ | 
				
			|||||||
 | 
					<template> | 
				
			||||||
 | 
					  <section class="select-wrapper" v-if="show"> | 
				
			||||||
 | 
					    <!-- 左侧部门树 --> | 
				
			||||||
 | 
					    <section class="dept-wrapper"> | 
				
			||||||
 | 
					      <DeptTree @node-click="handleDeptNodeClick" /> | 
				
			||||||
 | 
					    </section> | 
				
			||||||
 | 
					    <section class="dept-wrapper"> | 
				
			||||||
 | 
					      <el-table v-loading="loading" :data="list" @row-click="handleClickRow"> | 
				
			||||||
 | 
					        <el-table-column label="用户编号" align="center" key="id" prop="id" /> | 
				
			||||||
 | 
					        <el-table-column | 
				
			||||||
 | 
					          label="用户名称" | 
				
			||||||
 | 
					          align="center" | 
				
			||||||
 | 
					          prop="username" | 
				
			||||||
 | 
					          :show-overflow-tooltip="true" | 
				
			||||||
 | 
					        /> | 
				
			||||||
 | 
					        <el-table-column | 
				
			||||||
 | 
					          label="用户昵称" | 
				
			||||||
 | 
					          align="center" | 
				
			||||||
 | 
					          prop="nickname" | 
				
			||||||
 | 
					          :show-overflow-tooltip="true" | 
				
			||||||
 | 
					        /> | 
				
			||||||
 | 
					        <el-table-column | 
				
			||||||
 | 
					          label="部门" | 
				
			||||||
 | 
					          align="center" | 
				
			||||||
 | 
					          key="deptName" | 
				
			||||||
 | 
					          prop="deptName" | 
				
			||||||
 | 
					          :show-overflow-tooltip="true" | 
				
			||||||
 | 
					        /> | 
				
			||||||
 | 
					      </el-table> | 
				
			||||||
 | 
					      <Pagination | 
				
			||||||
 | 
					        :total="total" | 
				
			||||||
 | 
					        v-model:page="queryParams.pageNo" | 
				
			||||||
 | 
					        v-model:limit="queryParams.pageSize" | 
				
			||||||
 | 
					        @pagination="getList" | 
				
			||||||
 | 
					      /> | 
				
			||||||
 | 
					      <el-button type="primary" class="close" circle size="small" @click="close"> | 
				
			||||||
 | 
					        <Icon icon="ep:close" /> | 
				
			||||||
 | 
					      </el-button> | 
				
			||||||
 | 
					    </section> | 
				
			||||||
 | 
					  </section> | 
				
			||||||
 | 
					</template> | 
				
			||||||
 | 
					<script lang="ts" setup> | 
				
			||||||
 | 
					import * as UserApi from '@/api/system/user' | 
				
			||||||
 | 
					import DeptTree from '@/views/system/user/DeptTree.vue' | 
				
			||||||
 | 
					import {getPcUserPage} from "@/api/system/user"; | 
				
			||||||
 | 
					const show = ref(false) | 
				
			||||||
 | 
					const loading = ref(true) // 列表的加载中 | 
				
			||||||
 | 
					const total = ref(0) // 列表的总页数 | 
				
			||||||
 | 
					const list = ref([]) // 列表的数 | 
				
			||||||
 | 
					const queryParams = reactive({ | 
				
			||||||
 | 
					  pageNo: 1, | 
				
			||||||
 | 
					  pageSize: 10, | 
				
			||||||
 | 
					  username: undefined, | 
				
			||||||
 | 
					  mobile: undefined, | 
				
			||||||
 | 
					  status: undefined, | 
				
			||||||
 | 
					  deptId: undefined, | 
				
			||||||
 | 
					  createTime: [] | 
				
			||||||
 | 
					}) | 
				
			||||||
 | 
					const emit = defineEmits(['select', 'close']) | 
				
			||||||
 | 
					/** 查询列表 */ | 
				
			||||||
 | 
					const getList = async () => { | 
				
			||||||
 | 
					  loading.value = true | 
				
			||||||
 | 
					  try { | 
				
			||||||
 | 
					    const data = await UserApi.getPcUserPage(queryParams) | 
				
			||||||
 | 
					    list.value = data.list | 
				
			||||||
 | 
					    total.value = data.total | 
				
			||||||
 | 
					  } finally { | 
				
			||||||
 | 
					    loading.value = false | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 处理部门被点击 */ | 
				
			||||||
 | 
					const handleDeptNodeClick = async (row) => { | 
				
			||||||
 | 
					  queryParams.deptId = row.id | 
				
			||||||
 | 
					  await getList() | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function handleClickRow(row) { | 
				
			||||||
 | 
					  emit('select', row) | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					function open() { | 
				
			||||||
 | 
					  getList() | 
				
			||||||
 | 
					  show.value = true | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function close() { | 
				
			||||||
 | 
					  show.value = false | 
				
			||||||
 | 
					  emit('close') | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					defineExpose({ open }) | 
				
			||||||
 | 
					</script> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped> | 
				
			||||||
 | 
					.select-wrapper { | 
				
			||||||
 | 
					  display: flex; | 
				
			||||||
 | 
					  flex-flow: row nowrap; | 
				
			||||||
 | 
					  background-color: #fff; | 
				
			||||||
 | 
					  padding: 10px; | 
				
			||||||
 | 
					  padding-top: 50px; | 
				
			||||||
 | 
					  border-radius: 6px; | 
				
			||||||
 | 
					  min-height: 50vh; | 
				
			||||||
 | 
					  position: relative; | 
				
			||||||
 | 
					  .close { | 
				
			||||||
 | 
					    position: absolute; | 
				
			||||||
 | 
					    top: 10px; | 
				
			||||||
 | 
					    right: 10px; | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					  .selec-wrapper { | 
				
			||||||
 | 
					    max-width: 400px; | 
				
			||||||
 | 
					    display: flex; | 
				
			||||||
 | 
					    flex-flow: row nowrap; | 
				
			||||||
 | 
					    gap: 5px; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .users { | 
				
			||||||
 | 
					      flex: 1; | 
				
			||||||
 | 
					      display: flex; | 
				
			||||||
 | 
					      flex-flow: row wrap; | 
				
			||||||
 | 
					      gap: 5px; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .select { | 
				
			||||||
 | 
					      cursor: pointer; | 
				
			||||||
 | 
					      background-color: #f1faff; | 
				
			||||||
 | 
					      border: 1px dashed #00a3ff; | 
				
			||||||
 | 
					      padding: 0px 15px; | 
				
			||||||
 | 
					      color: #00a3ff; | 
				
			||||||
 | 
					      // color: #00a3ff; | 
				
			||||||
 | 
					      // text-decoration: underline; | 
				
			||||||
 | 
					      border-radius: 6px; | 
				
			||||||
 | 
					      height: fit-content; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      &:hover { | 
				
			||||||
 | 
					        opacity: 0.8; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					</style> | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue