|
|
@@ -5,30 +5,64 @@
|
|
|
width="500px"
|
|
|
@close="close">
|
|
|
<el-form ref="form" label-width="80px" :model="form" :rules="rules">
|
|
|
- <el-form-item label="父节点" prop="parentName">
|
|
|
- <el-select
|
|
|
- v-model="form.parentId"
|
|
|
- :disabled="!form.parentId"
|
|
|
- placeholder="请选择父节点">
|
|
|
- <el-option
|
|
|
- :label="form.parentName"
|
|
|
- style="height: auto; padding: 0"
|
|
|
- :value="form.parentId">
|
|
|
- <el-tree
|
|
|
- ref="tree"
|
|
|
- :data="treeData"
|
|
|
- default-expand-all
|
|
|
- :props="defaultProps"
|
|
|
- @node-click="handleNodeClick" />
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="名称" prop="name">
|
|
|
- <el-input v-model="form.name" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="排序" prop="order">
|
|
|
- <el-input v-model="form.order" />
|
|
|
- </el-form-item>
|
|
|
+ <el-row>
|
|
|
+ <el-col v-if="form.parentId !== 0" :span="24">
|
|
|
+ <el-form-item label="上级部门" prop="parentId">
|
|
|
+ <treeselect
|
|
|
+ v-model="form.parentId"
|
|
|
+ :normalizer="normalizer"
|
|
|
+ :options="deptOptions"
|
|
|
+ placeholder="选择上级部门" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="部门名称" prop="deptName">
|
|
|
+ <el-input v-model="form.deptName" placeholder="请输入部门名称" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="显示排序" prop="sort">
|
|
|
+ <el-input-number
|
|
|
+ v-model="form.sort"
|
|
|
+ controls-position="right"
|
|
|
+ :min="0" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="负责人" prop="leader">
|
|
|
+ <el-input
|
|
|
+ v-model="form.leader"
|
|
|
+ maxlength="20"
|
|
|
+ placeholder="请输入负责人" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="联系电话" prop="phone">
|
|
|
+ <el-input
|
|
|
+ v-model="form.phone"
|
|
|
+ maxlength="11"
|
|
|
+ placeholder="请输入联系电话" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="邮箱" prop="email">
|
|
|
+ <el-input
|
|
|
+ v-model="form.email"
|
|
|
+ maxlength="50"
|
|
|
+ placeholder="请输入邮箱" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="部门状态" prop="status">
|
|
|
+ <el-radio-group v-model="form.status">
|
|
|
+ <el-radio label="10">正常</el-radio>
|
|
|
+ <el-radio label="20">停用</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</el-form>
|
|
|
<template #footer>
|
|
|
<el-button @click="close">取 消</el-button>
|
|
|
@@ -38,44 +72,67 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
- import { doEdit, getList } from '@/api/dept'
|
|
|
+ import deptApi from '@/api/dept'
|
|
|
+ import Treeselect from '@riophae/vue-treeselect'
|
|
|
+ import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
|
|
|
|
export default {
|
|
|
name: 'DeptEdit',
|
|
|
+ components: { Treeselect },
|
|
|
data() {
|
|
|
return {
|
|
|
- treeData: [],
|
|
|
+ // 部门树选项
|
|
|
+ deptOptions: [],
|
|
|
defaultProps: {
|
|
|
children: 'children',
|
|
|
- label: 'name',
|
|
|
+ label: 'deptName',
|
|
|
},
|
|
|
form: {
|
|
|
- parentName: '',
|
|
|
- parentId: '',
|
|
|
+ status: '10',
|
|
|
},
|
|
|
rules: {
|
|
|
- parentName: [
|
|
|
- { required: true, trigger: 'blur', message: '请选择父节点' },
|
|
|
+ parentId: [
|
|
|
+ { required: true, trigger: 'blur', message: '请选择上级部门' },
|
|
|
+ ],
|
|
|
+ deptName: [
|
|
|
+ { required: true, trigger: 'blur', message: '请输入部门名称' },
|
|
|
+ ],
|
|
|
+ sort: [{ required: true, trigger: 'blur', message: '请输入排序' }],
|
|
|
+ email: [
|
|
|
+ {
|
|
|
+ type: 'email',
|
|
|
+ message: "'请输入正确的邮箱地址",
|
|
|
+ trigger: ['blur', 'change'],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ phone: [
|
|
|
+ {
|
|
|
+ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
|
|
+ message: '请输入正确的手机号码',
|
|
|
+ trigger: 'blur',
|
|
|
+ },
|
|
|
],
|
|
|
- name: [{ required: true, trigger: 'blur', message: '请输入名称' }],
|
|
|
- order: [{ required: true, trigger: 'blur', message: '请输入排序' }],
|
|
|
},
|
|
|
title: '',
|
|
|
dialogFormVisible: false,
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
- this.fetchData()
|
|
|
+ // this.fetchData()
|
|
|
},
|
|
|
methods: {
|
|
|
- async fetchData() {
|
|
|
- const {
|
|
|
- data: { list },
|
|
|
- } = await getList()
|
|
|
- this.treeData = list
|
|
|
+ async fetchData(row) {
|
|
|
+ let params = {}
|
|
|
+ if (row) {
|
|
|
+ params.excludeId = row.id
|
|
|
+ }
|
|
|
+ const { data: data } = await deptApi.getList(params)
|
|
|
+ if (data) {
|
|
|
+ this.deptOptions = this.translateDataToTree(data)
|
|
|
+ }
|
|
|
},
|
|
|
handleNodeClick(node) {
|
|
|
- this.form.parentName = node.name
|
|
|
+ this.form.parentName = node.deptName
|
|
|
this.form.parentId = node.id
|
|
|
},
|
|
|
showEdit(row) {
|
|
|
@@ -85,6 +142,7 @@
|
|
|
this.title = '编辑'
|
|
|
this.form = Object.assign({}, row)
|
|
|
}
|
|
|
+ this.fetchData(row)
|
|
|
this.dialogFormVisible = true
|
|
|
},
|
|
|
close() {
|
|
|
@@ -95,13 +153,29 @@
|
|
|
save() {
|
|
|
this.$refs['form'].validate(async (valid) => {
|
|
|
if (valid) {
|
|
|
- const { msg } = await doEdit(this.form)
|
|
|
- this.$baseMessage(msg, 'success', 'vab-hey-message-success')
|
|
|
+ let res
|
|
|
+ if (this.form.id) {
|
|
|
+ res = await deptApi.doEdit(this.form)
|
|
|
+ } else {
|
|
|
+ res = await deptApi.doAdd(this.form)
|
|
|
+ }
|
|
|
+ this.$baseMessage(res.msg, 'success', 'vab-hey-message-success')
|
|
|
this.$emit('fetch-data')
|
|
|
this.close()
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
+ /** 转换部门数据结构 */
|
|
|
+ normalizer(node) {
|
|
|
+ if (node.children && !node.children.length) {
|
|
|
+ delete node.children
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ id: node.id,
|
|
|
+ label: node.deptName,
|
|
|
+ children: node.children,
|
|
|
+ }
|
|
|
+ },
|
|
|
},
|
|
|
}
|
|
|
</script>
|