Browse Source

添加人员批量提交

v6
超级管理员 2 years ago
parent
commit
b8a3ffdd9b
  1. 2
      src/api/system/roleapi/postrole.ts
  2. 1
      src/components/DesignForm/public/form/formGroup.vue
  3. 18
      src/types/components.d.ts
  4. 1
      src/views/hr/archives/archivescont.vue
  5. 99
      src/views/hr/archives/index.vue
  6. 14
      src/views/hr/archives/useronepage.vue
  7. 4
      src/views/powermanage/rolepower/setuprole/setuprolepower.vue

2
src/api/system/roleapi/postrole.ts

@ -64,7 +64,7 @@ export function getSystemType(data: setupPage){
/** /**
* *
*/ */
export function getGrantRolePowers(data: getSystemMenusForRole): AxiosPromise<string[]>{ export function getGrantRolePowers(data: getSystemMenusForRole): AxiosPromise{
return request({ return request({
url: '/systemapi/grant/get_role_grant_powers', url: '/systemapi/grant/get_role_grant_powers',
method: 'post', method: 'post',

1
src/components/DesignForm/public/form/formGroup.vue

@ -274,6 +274,7 @@ onMounted(()=>{
> >
<template #item="{ element, index }"> <template #item="{ element, index }">
<div <div
class="group" class="group"
:class="{ :class="{

18
src/types/components.d.ts

@ -19,12 +19,16 @@ declare module '@vue/runtime-core' {
DiyIconfont: typeof import('./../components/DesignForm/public/expand/diy-iconfont.vue')['default'] DiyIconfont: typeof import('./../components/DesignForm/public/expand/diy-iconfont.vue')['default']
DragControl: typeof import('./../components/DesignForm/dragControl.vue')['default'] DragControl: typeof import('./../components/DesignForm/dragControl.vue')['default']
ElAffix: typeof import('element-plus/es')['ElAffix'] ElAffix: typeof import('element-plus/es')['ElAffix']
ElAlert: typeof import('element-plus/es')['ElAlert']
ElAside: typeof import('element-plus/es')['ElAside'] ElAside: typeof import('element-plus/es')['ElAside']
ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem'] ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
ElCard: typeof import('element-plus/es')['ElCard'] ElCard: typeof import('element-plus/es')['ElCard']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCascader: typeof import('element-plus/es')['ElCascader'] ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
@ -48,6 +52,7 @@ declare module '@vue/runtime-core' {
ElImage: typeof import('element-plus/es')['ElImage'] ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput'] ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
ElMain: typeof import('element-plus/es')['ElMain'] ElMain: typeof import('element-plus/es')['ElMain']
ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
@ -55,10 +60,12 @@ declare module '@vue/runtime-core' {
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover'] ElPopover: typeof import('element-plus/es')['ElPopover']
ElRadio: typeof import('element-plus/es')['ElRadio'] ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']
ElSpace: typeof import('element-plus/es')['ElSpace']
ElStep: typeof import('element-plus/es')['ElStep'] ElStep: typeof import('element-plus/es')['ElStep']
ElSteps: typeof import('element-plus/es')['ElSteps'] ElSteps: typeof import('element-plus/es')['ElSteps']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
@ -73,6 +80,7 @@ declare module '@vue/runtime-core' {
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem'] ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker'] ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTransfer: typeof import('element-plus/es')['ElTransfer']
ElTree: typeof import('element-plus/es')['ElTree'] ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
ElUpload: typeof import('element-plus/es')['ElUpload'] ElUpload: typeof import('element-plus/es')['ElUpload']
@ -97,14 +105,24 @@ declare module '@vue/runtime-core' {
IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default'] IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
IEpCaretTop: typeof import('~icons/ep/caret-top')['default'] IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
IEpClose: typeof import('~icons/ep/close')['default'] IEpClose: typeof import('~icons/ep/close')['default']
IEpCollection: typeof import('~icons/ep/collection')['default']
IEpDelete: typeof import('~icons/ep/delete')['default'] IEpDelete: typeof import('~icons/ep/delete')['default']
IEpDownload: typeof import('~icons/ep/download')['default']
IEpEdit: typeof import('~icons/ep/edit')['default'] IEpEdit: typeof import('~icons/ep/edit')['default']
IEpMessageBox: typeof import('~icons/ep/message-box')['default'] IEpMessageBox: typeof import('~icons/ep/message-box')['default']
IEpMinus: typeof import('~icons/ep/minus')['default']
IEpOperation: typeof import('~icons/ep/operation')['default'] IEpOperation: typeof import('~icons/ep/operation')['default']
IEpPicture: typeof import('~icons/ep/picture')['default']
IEpPlus: typeof import('~icons/ep/plus')['default'] IEpPlus: typeof import('~icons/ep/plus')['default']
IEpPosition: typeof import('~icons/ep/position')['default']
IEpRefresh: typeof import('~icons/ep/refresh')['default'] IEpRefresh: typeof import('~icons/ep/refresh')['default']
IEpRefreshLeft: typeof import('~icons/ep/refresh-left')['default']
IEpSearch: typeof import('~icons/ep/search')['default'] IEpSearch: typeof import('~icons/ep/search')['default']
IEpSetting: typeof import('~icons/ep/setting')['default'] IEpSetting: typeof import('~icons/ep/setting')['default']
IEpTop: typeof import('~icons/ep/top')['default']
IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
IEpUser: typeof import('~icons/ep/user')['default']
IEpView: typeof import('~icons/ep/view')['default']
LangSelect: typeof import('./../components/LangSelect/index.vue')['default'] LangSelect: typeof import('./../components/LangSelect/index.vue')['default']
List: typeof import('./../components/DesignForm/public/form/components/list.vue')['default'] List: typeof import('./../components/DesignForm/public/form/components/list.vue')['default']
ListTreeSide: typeof import('./../components/DesignForm/public/form/components/listTreeSide.vue')['default'] ListTreeSide: typeof import('./../components/DesignForm/public/form/components/listTreeSide.vue')['default']

1
src/views/hr/archives/archivescont.vue

@ -306,6 +306,7 @@ function editmvorg(){
</script> </script>
<template> <template>
<el-dialog v-model="boxShow" custom-class="dialog_box" :title="boxTitle" top="50px" :before-close="closeArchivesBox" width="80%"> <el-dialog v-model="boxShow" custom-class="dialog_box" :title="boxTitle" top="50px" :before-close="closeArchivesBox" width="80%">
<el-row v-loading="rowLoading" :gutter="20" > <el-row v-loading="rowLoading" :gutter="20" >
<el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
<el-card shadow="always" class="box-card-left"> <el-card shadow="always" class="box-card-left">

99
src/views/hr/archives/index.vue

@ -10,11 +10,14 @@ import { archivesCont,searchCriteriaForPeople } from '@/api/hr/people/type'
import { emptypeOptions } from '@/api/hr/people/datacont' import { emptypeOptions } from '@/api/hr/people/datacont'
import { getArchivesListPage } from '@/api/hr/people/index' import { getArchivesListPage } from '@/api/hr/people/index'
import UserRole from '@/assets/icons/user.svg' import UserRole from '@/assets/icons/user.svg'
import { UploadFilled } from '@element-plus/icons-vue'
/** /**
* 引入页面 * 引入页面
*/ */
import ArchivesCont from '@/views/hr/archives/archivescont.vue' import ArchivesCont from '@/views/hr/archives/archivescont.vue'
const uploadFFurl = import.meta.env.VITE_APP_BASE_API + "/hrapi/staff/uploadUserFiles"
const searchOrgFormRef = ref(ElForm); const searchOrgFormRef = ref(ElForm);
const orgTreeRef = ref(ElTree); // const orgTreeRef = ref(ElTree); //
const orgTreeLoading = ref(false); // const orgTreeLoading = ref(false); //
@ -98,6 +101,52 @@ function lookPeopleCont(cont:archivesCont){
function updateMyCont(cont:archivesCont){ function updateMyCont(cont:archivesCont){
peoplecont.value = cont peoplecont.value = cont
} }
//
const piLiangBox = ref(false)
//
const openPiliangBox = () =>{
piLiangBox.value = true
}
//
const handleOpenClose = () =>{
piLiangBox.value = false
}
const excelLoading = ref(false)
/**
* Excel文件change事件
*
* @param file
*/
function handleExcelChange(file: UploadFile) {
excelLoading.value = true
if (!/\.(xlsx|xls|XLSX|XLS)$/.test(file.name)) {
ElMessage.warning("上传Excel只能为xlsx、xls格式");
excelLoading.value = false;
return false;
}
}
const peopleListAry = ref<any[]>();
/**
@ 作者: 秦东
@ 时间: 2024-02-03 14:04:48
@ 功能: 上传成功
*/
const uploadTrue = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
excelLoading.value = false;
console.log("response",response);
console.log("uploadFile",uploadFile);
console.log("uploadFiles",uploadFiles);
peopleListAry.value = response.data.listAry
}
const uploadError = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
excelLoading.value = false;
console.log("1response",response);
console.log("1uploadFile",uploadFile);
console.log("1uploadFiles",uploadFiles);
}
// //
onMounted(() => { onMounted(() => {
haveOrgTreeInfo(); haveOrgTreeInfo();
@ -166,7 +215,15 @@ onMounted(() => {
type="success" type="success"
@click="addPeopleDialog()" @click="addPeopleDialog()"
> >
<i-ep-plus />新增 <template #icon><i-ep-plus /></template>新增
</el-button>
<el-button
v-hasPerm="['127710714914680832']"
type="warning"
@click="openPiliangBox"
>
<el-icon><MessageBox /></el-icon>
批量导入数据
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -228,6 +285,40 @@ onMounted(() => {
<ArchivesCont v-model:isShow="archivesBox" :archivesdata="peoplecont" @updatemyconting="updateMyCont" @getarchivespageclick="getArchivesPage" /> <ArchivesCont v-model:isShow="archivesBox" :archivesdata="peoplecont" @updatemyconting="updateMyCont" @getarchivespageclick="getArchivesPage" />
</div> </div>
</el-main> </el-main>
<el-dialog
v-model="piLiangBox"
title="批量导入人员信息"
width="800"
:before-close="handleOpenClose"
>
<el-row v-loading="excelLoading" element-loading-text="文档解析中,请稍候...">
<el-col :span="24">
<el-upload
class="upload-demo"
drag
:action="uploadFFurl"
:before-upload="handleExcelChange"
:on-success="uploadTrue"
:on-error = "uploadError"
multiple
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">
将电子表格拖到此处或 <em>单击上载</em>
</div>
</el-upload>
</el-col>
</el-row>
<div class="divBoxCont">
<el-row>
<el-col v-for="(item,index) in peopleListAry" :key="index" :span="24">
{{ item}}
</el-col>
</el-row>
</div>
</el-dialog>
</el-container> </el-container>
</template> </template>
<style lang='scss' scoped> <style lang='scss' scoped>
@ -250,4 +341,10 @@ onMounted(() => {
.orgTree{ .orgTree{
padding:5px 0; padding:5px 0;
} }
.divBoxCont{
width: 100%;
height:300px;
overflow: hidden;
overflow-y: auto;
}
</style> </style>

14
src/views/hr/archives/useronepage.vue

@ -0,0 +1,14 @@
<!--
@ 作者: 秦东
@ 时间: 2024-01-24 10:08:14
@ 备注: 人员信息单页手机
-->
<script lang='ts' setup>
</script>
<template>
<div></div>
</template>
<style lang='scss' scoped>
</style>

4
src/views/powermanage/rolepower/setuprole/setuprolepower.vue

@ -125,8 +125,10 @@ function getSysMenuTree(sysKey:string){
systemPowerMenusTree.value = data; systemPowerMenusTree.value = data;
getGrantRolePowers({name:sysKey,roleid:props.roleId}) getGrantRolePowers({name:sysKey,roleid:props.roleId})
.then(({data})=>{ .then(({data})=>{
// console.log("====>",data);
manageScope.value = data.level
if(data != null){ if(data != null){
gainPowerAry.value= data gainPowerAry.value= data.powerList
} }
}) })
.finally(()=>{ .finally(()=>{

Loading…
Cancel
Save