增加部门

This commit is contained in:
jiutianzhiyu 2021-03-29 00:25:59 +08:00
parent 442e9376ec
commit 492cb1b30b
4 changed files with 186 additions and 17 deletions

7
src/api/employees.js Normal file
View File

@ -0,0 +1,7 @@
import request from '@/utils/request'
// 获取员工简单信息
export function getEmployeeSimple() {
return request({
url: '/sys/user/simple'
})
}

View File

@ -0,0 +1,129 @@
<template>
<el-dialog title="新增部门" :visible="showDialog" @close="btnCancel">
<!-- 表单组件 el-form label-width设置label的宽度 -->
<!-- 匿名插槽 -->
<el-form ref="departForm" label-width="120px" :model="formData" :rules="rules">
<el-form-item label="部门名称" prop="name">
<el-input v-model="formData.name" style="width:80%" placeholder="1-50个字符" />
</el-form-item>
<el-form-item label="部门编码" prop="code">
<el-input v-model="formData.code" style="width:80%" placeholder="1-50个字符" />
</el-form-item>
<el-form-item label="部门负责人" prop="manager">
<el-select v-model="formData.manager" style="width:80%" placeholder="请选择" @focus="getEmployeeSimple">
<!-- 下拉菜单选项 -->
<el-option v-for="item in simpleUserInfo" :key="item.id" :label="item.username" :value="item.username" />
</el-select>
</el-form-item>
<el-form-item label="部门介绍" prop="introduce">
<el-input v-model="formData.introduce" style="width:80%" placeholder="1-300个字符" type="textarea" :rows="3" />
</el-form-item>
</el-form>
<!-- el-dialog有专门放置底部操作栏的 插槽 具名插槽 -->
<el-row slot="footer" type="flex" justify="center">
<!-- 列被分为24 -->
<el-col :span="6">
<el-button type="primary" size="small" @click="btnOK">确定</el-button>
<el-button size="small" @click="btnCancel">取消</el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { getDepartments, addDepartments } from '@/api/departments'
import { getEmployeeSimple } from '@/api/employees'
export default {
props: {
showDialog: {
type: Boolean,
default: false
},
treeNode: {
type: Object,
required: true
}
},
data() {
const checkNameRepeat = async(rule, value, callback) => {
// callback
// callback(new Error(''))
const { depts } = await getDepartments()
const isRepeat = depts.filter(item => item.pid === this.treeNode.id).some(item => item.name === value)
isRepeat ? callback(new Error(`同级部门下已经有${value}部门了`)) : callback()
}
const checkCodeRepeat = async(rule, value, callback) => {
const { depts } = await getDepartments()
const isRepeat = depts.some(item => item.code === value && value) // ,
isRepeat ? callback(new Error(`已经有部门使用了${value}编码`)) : callback()
}
return {
//
formData: {
name: '',
code: '',
manager: '',
introduce: ''
},
//
rules: {
name: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ min: 1, max: 50, message: '要求1-50个字符', trigger: 'blur' },
{ trigger: 'blur', validator: checkNameRepeat }
],
code: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ min: 1, max: 50, message: '要求1-50个字符', trigger: 'blur' },
{ trigger: 'blur', validator: checkCodeRepeat }
],
manager: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ min: 1, max: 50, message: '要求1-50个字符', trigger: 'blur' }
],
introduce: [
{ required: true, message: '不能为空', trigger: 'blur' },
{ min: 1, max: 300, message: '要求1-50个字符', trigger: 'blur' }
]
},
//
simpleUserInfo: []
}
},
methods: {
async getEmployeeSimple() {
const res = await getEmployeeSimple()
console.log(res)
this.simpleUserInfo = [...res]
},
//
async btnOK() {
try {
await this.$refs.departForm.validate()
// pid
await addDepartments({ ...this.formData, pid: this.treeNode.id })
//
this.$emit('addDepartOK')
// props: this.$emit(update: props, ), .sync
this.$emit('update:showDialog', false)
this.$message.success('添加成功')
} catch (error) {
console.log('捕获错误')
console.log(error)
}
},
//
btnCancel() {
// resetFields,
this.$refs.departForm.resetFields()
//
this.$emit('update:showDialog', false)
}
}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -40,9 +40,11 @@ export default {
}
},
methods: {
//
async operateDeparts(type) {
switch (type) {
case 'add':
this.$emit('addDeparts', this.treeNode)
break
case 'edit':
break

View File

@ -4,23 +4,43 @@
<el-card class="tree-card">
<!-- 用了行列布局 -->
<!-- 1. 第一行 公司信息-->
<tree-tools :tree-node="company" :is-root="true" />
<tree-tools
:tree-node="company"
:is-root="true"
@addDeparts="addDeparts"
/>
<!-- 2. 树型控件 -->
<el-tree :data="departs" :props="defaultProps" :default-expand-all="true">
<el-tree
:data="departs"
:props="defaultProps"
:default-expand-all="true"
>
<!-- 作用域插槽 -->
<tree-tools slot-scope="{data}" :tree-node="data" @delDeparts="getDeparts" /><!-- 父传子-->
<tree-tools
slot-scope="{data}"
:tree-node="data"
@delDeparts="getDeparts"
@addDeparts="addDeparts"
/><!-- -->
</el-tree>
</el-card>
<!-- 新增部门弹窗 -->
<add-depart
:show-dialog.sync="showDialog"
:tree-node="node"
@addDepartOK="getDeparts"
/>
</div>
</div>
</template>
<script>
import treeTools from './componets/tree-tools.vue'
import TreeTools from './componets/tree-tools.vue'
import AddDepart from './componets/add-depart.vue'
import { getDepartments } from '@/api/departments'
import { listToTreeData } from '@/utils/list-to-treedata'
export default {
components: { treeTools },
components: { TreeTools, AddDepart },
data() {
return {
company: {},
@ -28,7 +48,9 @@ export default {
defaultProps: {
label: 'name',
children: 'children'
}
},
showDialog: false,
node: {}
}
},
created() {
@ -43,8 +65,17 @@ export default {
// console.log(this.departs)
this.company = {
name: 'xx股份有限公司' || res.companyName,
manager: '负责人'
manager: '负责人',
id: ''
}
},
//
addDeparts(data) {
//
this.showDialog = true
// ,
this.node = data
}
}
}