增加部门
This commit is contained in:
parent
442e9376ec
commit
492cb1b30b
7
src/api/employees.js
Normal file
7
src/api/employees.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
// 获取员工简单信息
|
||||||
|
export function getEmployeeSimple() {
|
||||||
|
return request({
|
||||||
|
url: '/sys/user/simple'
|
||||||
|
})
|
||||||
|
}
|
129
src/views/departments/componets/add-depart.vue
Normal file
129
src/views/departments/componets/add-depart.vue
Normal 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>
|
@ -40,9 +40,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// 操作部门信息
|
||||||
async operateDeparts(type) {
|
async operateDeparts(type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'add':
|
case 'add':
|
||||||
|
this.$emit('addDeparts', this.treeNode)
|
||||||
break
|
break
|
||||||
case 'edit':
|
case 'edit':
|
||||||
break
|
break
|
||||||
|
@ -4,23 +4,43 @@
|
|||||||
<el-card class="tree-card">
|
<el-card class="tree-card">
|
||||||
<!-- 用了行列布局 -->
|
<!-- 用了行列布局 -->
|
||||||
<!-- 1. 第一行 公司信息-->
|
<!-- 1. 第一行 公司信息-->
|
||||||
<tree-tools :tree-node="company" :is-root="true" />
|
<tree-tools
|
||||||
|
:tree-node="company"
|
||||||
|
:is-root="true"
|
||||||
|
@addDeparts="addDeparts"
|
||||||
|
/>
|
||||||
<!-- 2. 树型控件 -->
|
<!-- 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-tree>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
<!-- 新增部门弹窗 -->
|
||||||
|
<add-depart
|
||||||
|
:show-dialog.sync="showDialog"
|
||||||
|
:tree-node="node"
|
||||||
|
@addDepartOK="getDeparts"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<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 { getDepartments } from '@/api/departments'
|
||||||
import { listToTreeData } from '@/utils/list-to-treedata'
|
import { listToTreeData } from '@/utils/list-to-treedata'
|
||||||
export default {
|
export default {
|
||||||
components: { treeTools },
|
components: { TreeTools, AddDepart },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
company: {},
|
company: {},
|
||||||
@ -28,7 +48,9 @@ export default {
|
|||||||
defaultProps: {
|
defaultProps: {
|
||||||
label: 'name',
|
label: 'name',
|
||||||
children: 'children'
|
children: 'children'
|
||||||
}
|
},
|
||||||
|
showDialog: false,
|
||||||
|
node: {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@ -43,22 +65,31 @@ export default {
|
|||||||
// console.log(this.departs)
|
// console.log(this.departs)
|
||||||
this.company = {
|
this.company = {
|
||||||
name: 'xx股份有限公司' || res.companyName,
|
name: 'xx股份有限公司' || res.companyName,
|
||||||
manager: '负责人'
|
manager: '负责人',
|
||||||
|
id: ''
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增部门
|
||||||
|
addDeparts(data) {
|
||||||
|
// 显示弹窗
|
||||||
|
this.showDialog = true
|
||||||
|
// 接收树形组件的数据, 主要是父部门节点
|
||||||
|
this.node = data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.tree-card {
|
.tree-card {
|
||||||
padding: 30px 140px;
|
padding: 30px 140px;
|
||||||
font-size:14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
.is-leaf{
|
.is-leaf {
|
||||||
visibility:hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
.el-icon-arrow-down{
|
.el-icon-arrow-down {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user