You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

437 lines
15 KiB

<template>
<div class="app-container">
<div class="filter-container">
<el-form>
<el-form-item>
<el-input v-model="listQuery.name" placeholder="请输入部门名称" clearable style="width: 280px" @keyup.enter.native="handleFilter" />
<el-button type="primary" icon="el-icon-search" @click="handleFilter">
查询
</el-button>
<el-button type="primary" icon="el-icon-edit" @click="showCreate">
添加
</el-button>
<el-button type="danger" icon="el-icon-delete" @click="deleteDepartment">
删除
</el-button>
</el-form-item>
</el-form>
</div>
<el-table
ref="list"
:data="list"
border
row-key="id"
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
highlight-current-row
@row-click="onRowClick"
@selection-change="handleSelectionChange"
@select="rowSelect"
@select-all="selectAll"
>
<el-table-column type="selection" width="40" />
<el-table-column type="index" align="center" label="序号" width="80" />
<el-table-column label="部门名称" prop="name" style="width: 60px;" />
<el-table-column :formatter="formatter.getChineseName" align="center" label="负责人" prop="leader" style="width: 60px;" />
<el-table-column align="center" label="创建时间" prop="createTime" style="width: 60px;" />
<el-table-column align="center" label="最近修改时间" prop="updateTime" style="width: 60px;" />
<el-table-column align="center" label="管理" width="150">
<template slot-scope="scope">
<el-button type="primary" icon="edit" @click="showUpdate(scope.row,scope.$index)">
修改
</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page-num.sync="listQuery.pageNum" :page-row.sync="listQuery.pageSize" @pagination="getList" />
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" @close="closeDialog">
<el-form ref="tempDepartment" :model="tempDepartment" label-width="130px">
<el-row :gutter="20">
<el-col :span="9">
<el-form-item label="部门名称" required>
<el-input v-model="tempDepartment.name" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="负责人" size="small" required>
<el-select v-model="tempDepartment.leader" filterable placeholder="请选择" clearable>
<el-option v-for="item in leaders" :key="item.id" :label="item.nickname" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="检验类别" prop="jianyanleibie">
<el-select v-model="tempDepartment.jianyanleibie" multiple collapse-tags placeholder="请选择检验类别">
<el-option value="DJ" label="定期检验" />
<el-option value="JJ" label="监督检验" />
<el-option value="ZZ" label="制造监检" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="设备种类" prop="shebeizhongleidaima">
<el-select v-model="tempDepartment.shebeizhongleidaima" multiple collapse-tags placeholder="请选择设备种类">
<el-option
v-for="item in sbzlList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="所属区划" prop="quhuadaima">
<el-select v-model="tempDepartment.quhuadaima" multiple collapse-tags placeholder="请选择所属区划">
<el-option
v-for="item in areas"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="上级科室">
<el-select v-model="tempDepartment.parentId" filterable clearable>
<el-option v-for="dept in departments" :key="dept.id" :value="dept.id" :label="dept.name" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="联系人">
<el-input v-model="tempDepartment.lianxiren" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="联系人电话">
<el-input v-model="tempDepartment.lianxirenDianhua" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="机构核准证号">
<el-input v-model="tempDepartment.hezhunzhenghao" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="地址">
<el-input v-model="tempDepartment.dizhi" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="邮编">
<el-input v-model="tempDepartment.youbian" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="电话">
<el-input v-model="tempDepartment.tel" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="网址">
<el-input v-model="tempDepartment.website" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="邮箱">
<el-input v-model="tempDepartment.email" type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="启用">
<el-switch v-model="tempDepartment.state" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="成员">
<template>
<el-transfer v-model="departmentUserList" :props="{key: 'id', label: 'nickname'}" :button-texts="['移除', '添加']" :titles="['未分配员工', '部门成员']" :data="unAllotUserList" />
</template>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">
取 消
</el-button>
<el-button v-if="dialogStatus==='create'" type="success" @click="createDepartment">
创 建
</el-button>
<el-button v-if="dialogStatus==='update'" type="primary" @click="updateDepartment">
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import Pagination from '@/components/Pagination'
import { updateDepartmentFn, deleteDepartmentFn, addDepartmentFn } from '@/api/common'
export default {
name: 'DepartmentList',
components: { Pagination },
data() {
return {
list: [],
total: 0,
dialogStatus: 'create',
dialogFormVisible: false,
listQuery: {
pageNum: 1,
pageSize: 20
},
textMap: {
update: '编辑',
create: '新建部门'
},
tempDepartment: {
},
// 所有用户
unAllotUserList: [],
departmentUserList: [],
leaders: [],
multipleSelection: [],
isIndeterminate: true,
sbzlList: [],
areas: [],
departmentAll: []
}
},
computed: {
departments: function() {
return this.departmentAll.filter(row => row.id !== this.tempDepartment.id)
}
},
created() {
this.getList()
this.getSbzlList()
this.getArea()
this.getAllDepartment()
},
methods: {
getAllDepartment() {
this.api({
url: '/department/all',
method: 'get'
}).then(data => {
this.departmentAll = [{ id: 0, name: '顶级科室' }]
this.departmentAll = this.departmentAll.concat(data)
})
},
getSbzlList() {
this.api({
url: '/sedirectory/getList',
method: 'get',
params: {
sbzl: undefined,
level: '1'
}
}).then(data => {
this.sbzlList = data
})
},
getArea() { // 查询区划
this.api({
url: '/area/getShiArea',
method: 'get',
params: {
shidaima: '370100'
}
}).then(data => {
this.areas = data
})
},
getList() {
// 查询列表
this.api({
url: '/department/tree',
method: 'get',
params: this.listQuery
}).then(data => {
data.forEach(row => {
row.isChecked = false
})
this.list = data
})
},
showCreate() {
this.leaders = this.$store.getters.allUser
this.tempDepartment = {
parentId: 0
}
this.getUserListByDepartmentIdOrNull(0)
this.dialogStatus = 'create'
this.dialogFormVisible = true
},
showUpdate(item) {
this.leaders = this.$store.getters.allUser
this.tempDepartment = item
this.tempDepartment.quhuadaima = item.quhuadaima && item.quhuadaima.split(',')
this.tempDepartment.shebeizhongleidaima = item.shebeizhongleidaima && item.shebeizhongleidaima.split(',')
this.tempDepartment.jianyanleibie = item.jianyanleibie && item.jianyanleibie.split(',')
this.getUserListByDepartmentIdOrNull(item.id)
this.getUserListByDepartmentId(item.id)
this.dialogStatus = 'update'
this.dialogFormVisible = true
},
getUserListByDepartmentId(departmentId) {
this.api({
url: '/user/getUserListByDepartmentId',
method: 'get',
params: {
departmentId: departmentId
}
}).then((data) => {
if (data != null) {
data.forEach(user => {
this.departmentUserList.push(user.id)
})
}
})
},
getUserListByDepartmentIdOrNull(departmentId) {
this.api({
url: '/user/getUserListByDepartmentIdOrNull',
method: 'get',
params: {
departmentId: departmentId
}
}).then((data) => {
this.unAllotUserList = data
})
},
createDepartment() {
const form = {}
form.department = this.tempDepartment
form.userIds = this.departmentUserList
form.department.quhuadaima = form.department.quhuadaima && form.department.quhuadaima.toString()
form.department.shebeizhongleidaima = form.department.shebeizhongleidaima && form.department.shebeizhongleidaima.toString()
form.department.jianyanleibie = form.department.jianyanleibie && form.department.jianyanleibie.toString()
this.$refs['tempDepartment'].validate(valid => {
if (valid) {
addDepartmentFn(form).then(() => {
this.$message.success('添加成功。')
this.getList()
this.dialogFormVisible = false
})
} else {
return false
}
})
},
updateDepartment() {
const form = {}
form.department = this.tempDepartment
form.userIds = this.departmentUserList
form.department.quhuadaima = form.department.quhuadaima.toString()
form.department.shebeizhongleidaima = form.department.shebeizhongleidaima.toString()
form.department.jianyanleibie = form.department.jianyanleibie.toString()
// 修改用户信息
this.$refs['tempDepartment'].validate(valid => {
if (valid) {
this.tempDepartment.userList = this.departmentUserList
updateDepartmentFn(form).then(() => {
this.$message.success('修改成功。')
this.getList()
this.dialogFormVisible = false
})
} else {
return false
}
})
},
deleteDepartment() {
if (this.multipleSelection.length <= 0) {
this.$message.warning('请选择要删除的数据。')
return
}
const pks = []
this.multipleSelection.forEach(department => {
pks.push(department.id)
})
this.$confirm('确定删除此科室吗?可能会导致下属人员没有科室', '提示', {
confirmButtonText: '确定',
showCancelButton: '取消',
type: 'warning'
}).then(() => {
deleteDepartmentFn({ pks: pks }).then(() => {
this.$message({ message: '删除成功。', type: 'success' })
this.getList()
})
})
},
handleFilter() {
// 查询事件
this.listQuery.pageNum = 1
this.getList()
},
onRowClick(row) {
this.$refs.list.toggleRowSelection(row)
},
handleSelectionChange: function(val) {
this.multipleSelection = val
},
closeDialog() {
this.unAllotUserList = []
this.departmentUserList = []
},
/**
* 注意在获取初始数据时,所有节点(包括子节点)都增加一个isChecked 标志参数
*
* @param selection
* @param row
*/
rowSelect(selection, row) {
if (row.children) { // 只对有子节点的行响应
if (!row.isChecked) { // 由行数据中的元素isChecked判断当前是否被选中
row.children.map((item) => { // 遍历所有子节点
this.$refs.list.toggleRowSelection(item, true) // 切换该子节点选中状态
/*
方法名 说明 参数
用于多选表格,切换某一行的选中状态, row, selected
toggleRowSelection 如果使用了第二个参数,则是设置这一行
选中与否(selected 为 true 则选中)
*/
item.isChecked = true
})
row.isChecked = true // 当前行isChecked标志元素切换为false
} else {
row.children.map((item) => {
this.$refs.list.toggleRowSelection(item, false)
item.isChecked = false
})
row.isChecked = false
}
// console.log(this.multipleSelection, row);
}
},
selectAll(selection) {
// selection 是选中的数据集合
this.$refs.list.data.map((items) => { // 使用$ref获取注册的子组件信息,用data获取所有行,并用map函数遍历行
if (items.children) {
if (!items.isChecked) { // 若遍历出来的行未选中
this.$refs.list.toggleRowSelection(items, true) // 行变为选中状态
items.isChecked = true // 更新标志参数
items.children.map((item) => { // 遍历子节点并改变状态与标志参数
this.$refs.list.toggleRowSelection(item, true)
item.isChecked = true
})
} else { // 选中状态同理
this.$refs.list.toggleRowSelection(items, false)
items.isChecked = false
items.children.map((item) => {
this.$refs.list.toggleRowSelection(item, false)
item.isChecked = false
})
}
} else {
items.isChecked = !items.isChecked
}
})
// console.log(this.orgs)
}
}
}
</script>