|
|
@@ -2,47 +2,90 @@
|
|
|
<el-container>
|
|
|
<el-main>
|
|
|
<el-row :gutter="5">
|
|
|
- <el-col :span="6">
|
|
|
+ <el-col :span="4">
|
|
|
<div style="height: 10px"></div>
|
|
|
- <el-input v-model="searchDeptContent" placeholder="请输入科室名称" clearable prefix-icon="el-icon-search"></el-input>
|
|
|
+ <el-input v-model="searchDeptContent" placeholder="请输入科室名称" clearable @clear="queryConditions.deptCode = '' "
|
|
|
+ prefix-icon="el-icon-search"></el-input>
|
|
|
<div style="height: 5px"></div>
|
|
|
<el-tree
|
|
|
- :data="depts"
|
|
|
- :props="defaultProps"
|
|
|
- default-expand-all
|
|
|
- :filter-node-method="filterNode"
|
|
|
- :style="{ height: tableHeight + 'px', overflowY: 'scroll' }"
|
|
|
- ref="tree"
|
|
|
- @node-click="handleClickDeptTreeNode"
|
|
|
+ :data="depts"
|
|
|
+ :props="defaultProps"
|
|
|
+ default-expand-all
|
|
|
+ :filter-node-method="filterNode"
|
|
|
+ :style="{ height: tableHeight + 'px', overflowY: 'scroll' }"
|
|
|
+ ref="tree"
|
|
|
+ @node-click="handleClickDeptTreeNode"
|
|
|
>
|
|
|
</el-tree>
|
|
|
</el-col>
|
|
|
- <el-col :span="18">
|
|
|
+ <el-col :span="20">
|
|
|
<div style="height: 10px"></div>
|
|
|
- <el-input v-model="searchUserContent" style="width: 300px" placeholder="请输入人员姓名或工号" clearable prefix-icon="el-icon-search"></el-input>
|
|
|
+ <el-input v-model="queryConditions.name" style="width: 300px" placeholder="请输入人员姓名或工号" clearable
|
|
|
+ prefix-icon="el-icon-search"></el-input>
|
|
|
+ 是否停用:
|
|
|
+ <el-select v-model="queryConditions.whetherToDisable" style="width: 80px">
|
|
|
+ <el-option v-for="item in dropDownSelection" :key="item.code" :value="item.code" :label="item.name">
|
|
|
+
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ 是否有医保码:
|
|
|
+ <el-select v-model="queryConditions.isThereAMedicalInsuranceCode" style="width: 80px">
|
|
|
+ <el-option v-for="item in dropDownSelection" :key="item.code" :value="item.code" :label="item.name">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ <el-button icon="el-icon-search" type="primary" @click="clickToQuery">
|
|
|
+ 查询
|
|
|
+ </el-button>
|
|
|
<div style="height: 5px"></div>
|
|
|
- <el-table :data="cptUsers.slice((currentPage - 1) * pageSize, currentPage * pageSize)" :height="tableHeight - 40" stripe highlight-current-row>
|
|
|
+ <el-table :data="users" border
|
|
|
+ :height="tableHeight - 40" stripe highlight-current-row>
|
|
|
<el-table-column prop="name" label="姓名"></el-table-column>
|
|
|
<el-table-column prop="code" label="编号"></el-table-column>
|
|
|
<el-table-column prop="codeRs" label="工号"></el-table-column>
|
|
|
<el-table-column prop="deptName" label="科室"></el-table-column>
|
|
|
<el-table-column prop="title" label="职称"></el-table-column>
|
|
|
<el-table-column prop="position" label="职务"></el-table-column>
|
|
|
- <el-table-column label="操作">
|
|
|
+ <el-table-column prop="markName" label="在院标志"></el-table-column>
|
|
|
+ <el-table-column prop="ifcaderName" label="干工标志"></el-table-column>
|
|
|
+ <el-table-column prop="orderYn" label="医生处方权">
|
|
|
+ <template #default="scope">
|
|
|
+ <span v-if="scope.row.orderYn === '1'"> 普通处方权</span>
|
|
|
+ <span v-else-if="scope.row.orderYn === '2'">毒麻药处方权</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="ysjbName" label="病历级别"></el-table-column>
|
|
|
+ <el-table-column prop="ghChargeTypeName" label="挂号号别"></el-table-column>
|
|
|
+ <el-table-column prop="doctorXzYpName" label="限制药品级别" show-overflow-tooltip></el-table-column>
|
|
|
+ <el-table-column prop="loginFlag" label="病区允许就诊">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ scope.row.loginFlag === '1' ? '允许' : '不允许' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="delFlag" label="停用标志">
|
|
|
+ <template #default="scope">
|
|
|
+ <span v-if="scope.row.loginFlag === '1'">√</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="socialNo" label="身份证"></el-table-column>
|
|
|
+ <el-table-column prop="phoneNo" label="手机号码"></el-table-column>
|
|
|
+ <el-table-column prop="ybCode" label="医保编码"></el-table-column>
|
|
|
+ <el-table-column label="操作" fixed="right">
|
|
|
<template v-slot="scope">
|
|
|
- <el-button type="text" icon="el-icon-edit" @click="viewUserRoles(scope.row)">人员角色</el-button>
|
|
|
+ <el-button type="text" size="small" @click="viewUserRoles(scope.row)">角色</el-button>
|
|
|
+ <br>
|
|
|
+ <el-button type="text" @click="clickToEdit(scope.row)">编辑</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
<el-pagination
|
|
|
- @size-change="handleSizeChange"
|
|
|
- @current-change="handleCurrentChange"
|
|
|
- :current-page="currentPage"
|
|
|
- :page-sizes="[25, 50, 75]"
|
|
|
- :page-size="pageSize"
|
|
|
- layout="total, sizes, prev, pager, next, jumper"
|
|
|
- :total="cptUsers.length"
|
|
|
- style="margin-top: 5px"
|
|
|
+ @size-change="handleSizeChange"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ :current-page="queryConditions.currentPage"
|
|
|
+ :page-sizes="[30, 50, 75]"
|
|
|
+ :page-size="queryConditions.pageSize"
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
+ :total="queryConditions.total"
|
|
|
+ style="margin-top: 5px"
|
|
|
></el-pagination>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -69,166 +112,180 @@
|
|
|
</el-dialog>
|
|
|
</el-main>
|
|
|
</el-container>
|
|
|
+ <PersonnelInformationEditing :userInfo="userInfo" v-if="editDialog"
|
|
|
+ @close="editDialog = false"/>
|
|
|
</template>
|
|
|
|
|
|
-<script>
|
|
|
-import { computed, onMounted, ref, watchEffect } from 'vue'
|
|
|
+<script setup name="UserRoleSettings">
|
|
|
import store from '@/store'
|
|
|
-import { addNewRole, getAllRoles, getAllUsers, getDeptTree, getUserRoles, saveUserRoles } from '@/api/settings/permission-settings'
|
|
|
-import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
-export default {
|
|
|
- setup() {
|
|
|
- const windowSize = store.state.app.windowSize
|
|
|
- const tableHeight = windowSize.h - 45
|
|
|
-
|
|
|
- const depts = ref([])
|
|
|
- const users = ref([])
|
|
|
- const roles = ref([])
|
|
|
-
|
|
|
- const cptUsers = computed(() => {
|
|
|
- return users.value.filter((item) => {
|
|
|
- return item.deptCode.indexOf(currentDeptCode.value) !== -1 && (item.name.indexOf(searchUserContent.value) !== -1 || item.codeRs.indexOf(searchUserContent.value) !== -1)
|
|
|
- })
|
|
|
- })
|
|
|
- const currentDeptCode = ref('')
|
|
|
- const searchDeptContent = ref('')
|
|
|
- const searchUserContent = ref('')
|
|
|
-
|
|
|
- const defaultProps = {
|
|
|
- id: 'code',
|
|
|
- label: 'name',
|
|
|
- children: 'children',
|
|
|
- }
|
|
|
- const tree = ref(null)
|
|
|
- watchEffect(() => {
|
|
|
- if (searchDeptContent.value) {
|
|
|
- if (tree.value) {
|
|
|
- tree.value.filter(searchDeptContent.value)
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (tree.value) {
|
|
|
- tree.value.filter(null)
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- const filterNode = (value, data) => {
|
|
|
- if (!value) return true
|
|
|
- return data.name.indexOf(value) !== -1
|
|
|
- }
|
|
|
- const handleClickDeptTreeNode = (row) => {
|
|
|
- currentDeptCode.value = row.code
|
|
|
- }
|
|
|
+import {
|
|
|
+ addNewRole,
|
|
|
+ getAllRoles,
|
|
|
+ getAllUsers,
|
|
|
+ getDeptTree,
|
|
|
+ getUserRoles,
|
|
|
+ saveUserRoles
|
|
|
+} from '@/api/settings/permission-settings'
|
|
|
+import {ElMessage, ElMessageBox} from 'element-plus'
|
|
|
+import PersonnelInformationEditing from "@/components/settings/permissions/PersonnelInformationEditing.vue";
|
|
|
|
|
|
- const pageSize = ref(25)
|
|
|
- const currentPage = ref(1)
|
|
|
- const handleSizeChange = (val) => {
|
|
|
- pageSize.value = val
|
|
|
- }
|
|
|
- const handleCurrentChange = (val) => {
|
|
|
- currentPage.value = val
|
|
|
- }
|
|
|
+const windowSize = store.state.app.windowSize
|
|
|
+const tableHeight = windowSize.h - 45
|
|
|
|
|
|
- const viewUserRoles = (val) => {
|
|
|
- currentUser.value = val
|
|
|
- roleDialog.value = true
|
|
|
- getUserRoles(val.code).then((res) => {
|
|
|
- toggleSelection(res)
|
|
|
- })
|
|
|
- }
|
|
|
+const depts = ref([])
|
|
|
+const users = ref([])
|
|
|
+const roles = ref([])
|
|
|
+
|
|
|
+let queryConditions = $ref({
|
|
|
+ code: '',
|
|
|
+ deptCode: '',
|
|
|
+ whetherToDisable: 9,
|
|
|
+ isThereAMedicalInsuranceCode: 9,
|
|
|
+ pageSize: 30,
|
|
|
+ currentPage: 1,
|
|
|
+ total: 0
|
|
|
+})
|
|
|
+
|
|
|
+let userInfo = $ref({})
|
|
|
+let editDialog = $ref(false)
|
|
|
|
|
|
- const currentUser = ref({})
|
|
|
- const roleDialog = ref(false)
|
|
|
- const roleTable = ref(null)
|
|
|
- const selectedRoles = ref([])
|
|
|
- const handleSelectRoles = (val) => {
|
|
|
- selectedRoles.value = val
|
|
|
+const searchDeptContent = ref('')
|
|
|
+
|
|
|
+const defaultProps = {
|
|
|
+ id: 'code',
|
|
|
+ label: 'name',
|
|
|
+ children: 'children',
|
|
|
+}
|
|
|
+const tree = ref(null)
|
|
|
+watchEffect(() => {
|
|
|
+ if (searchDeptContent.value) {
|
|
|
+ if (tree.value) {
|
|
|
+ tree.value.filter(searchDeptContent.value)
|
|
|
}
|
|
|
- const toggleSelection = (rows) => {
|
|
|
- roleTable.value.clearSelection()
|
|
|
- if (rows && rows.length > 0) {
|
|
|
- rows.forEach((row) => {
|
|
|
- roles.value.forEach((role) => {
|
|
|
- if (row === role.id) {
|
|
|
- roleTable.value.toggleRowSelection(role)
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ if (tree.value) {
|
|
|
+ tree.value.filter(null)
|
|
|
}
|
|
|
+ }
|
|
|
+})
|
|
|
+const filterNode = (value, data) => {
|
|
|
+ if (!value) return true
|
|
|
+ return data.name.indexOf(value) !== -1
|
|
|
+}
|
|
|
+const handleClickDeptTreeNode = (row) => {
|
|
|
+ searchDeptContent.value = row.name
|
|
|
+ queryConditions.deptCode = row.code
|
|
|
+ clickToQuery()
|
|
|
+}
|
|
|
|
|
|
- const beforeAddRole = () => {
|
|
|
- ElMessageBox.prompt('请输入要添加的角色名称', '添加新角色', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- })
|
|
|
- .then(({ value }) => {
|
|
|
- addNewRole(value).then(() => {
|
|
|
- ElMessage({
|
|
|
- message: '添加成功。',
|
|
|
- type: 'success',
|
|
|
- duration: 2500,
|
|
|
- showClose: true,
|
|
|
- })
|
|
|
- getAllRoles().then((res) => {
|
|
|
- roles.value = res
|
|
|
- })
|
|
|
- })
|
|
|
- })
|
|
|
- .catch(() => {})
|
|
|
- }
|
|
|
+const handleSizeChange = (val) => {
|
|
|
+ queryConditions.pageSize = val
|
|
|
+ clickToQuery()
|
|
|
+}
|
|
|
+const handleCurrentChange = (val) => {
|
|
|
+ queryConditions.currentPage = val
|
|
|
+ getAllUsers(queryConditions).then(res => {
|
|
|
+ users.value = res.records
|
|
|
+ })
|
|
|
|
|
|
- const saveRoles = () => {
|
|
|
- const param = {
|
|
|
- code: currentUser.value.code,
|
|
|
- roles: selectedRoles.value,
|
|
|
- }
|
|
|
- saveUserRoles(param).then(() => {
|
|
|
- roleDialog.value = false
|
|
|
- ElMessage({
|
|
|
- message: '保存成功',
|
|
|
- type: 'success',
|
|
|
- duration: 2500,
|
|
|
- showClose: true,
|
|
|
- })
|
|
|
- })
|
|
|
- }
|
|
|
+}
|
|
|
+
|
|
|
+const viewUserRoles = (val) => {
|
|
|
+ currentUser.value = val
|
|
|
+ roleDialog.value = true
|
|
|
+ getUserRoles(val.code).then((res) => {
|
|
|
+ toggleSelection(res)
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
- onMounted(() => {
|
|
|
- getAllUsers().then((res) => {
|
|
|
- users.value = res
|
|
|
+const currentUser = ref({})
|
|
|
+const roleDialog = ref(false)
|
|
|
+const roleTable = ref(null)
|
|
|
+const selectedRoles = ref([])
|
|
|
+const handleSelectRoles = (val) => {
|
|
|
+ selectedRoles.value = val
|
|
|
+}
|
|
|
+const toggleSelection = (rows) => {
|
|
|
+ roleTable.value.clearSelection()
|
|
|
+ if (rows && rows.length > 0) {
|
|
|
+ rows.forEach((row) => {
|
|
|
+ roles.value.forEach((role) => {
|
|
|
+ if (row === role.id) {
|
|
|
+ roleTable.value.toggleRowSelection(role)
|
|
|
+ }
|
|
|
})
|
|
|
- getAllRoles().then((res) => {
|
|
|
- roles.value = res
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const clickToEdit = (row) => {
|
|
|
+ console.log(row)
|
|
|
+ editDialog = true
|
|
|
+ userInfo = row
|
|
|
+}
|
|
|
+
|
|
|
+const beforeAddRole = () => {
|
|
|
+ ElMessageBox.prompt('请输入要添加的角色名称', '添加新角色', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ })
|
|
|
+ .then(({value}) => {
|
|
|
+ addNewRole(value).then(() => {
|
|
|
+ ElMessage({
|
|
|
+ message: '添加成功。',
|
|
|
+ type: 'success',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ getAllRoles().then((res) => {
|
|
|
+ roles.value = res
|
|
|
+ })
|
|
|
+ })
|
|
|
})
|
|
|
- getDeptTree().then((res) => {
|
|
|
- depts.value = res
|
|
|
+ .catch(() => {
|
|
|
})
|
|
|
+}
|
|
|
+
|
|
|
+const saveRoles = () => {
|
|
|
+ const param = {
|
|
|
+ code: currentUser.value.code,
|
|
|
+ roles: selectedRoles.value,
|
|
|
+ }
|
|
|
+ saveUserRoles(param).then(() => {
|
|
|
+ roleDialog.value = false
|
|
|
+ ElMessage({
|
|
|
+ message: '保存成功',
|
|
|
+ type: 'success',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
})
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
- return {
|
|
|
- tree,
|
|
|
- depts,
|
|
|
- tableHeight,
|
|
|
- searchDeptContent,
|
|
|
- searchUserContent,
|
|
|
- users,
|
|
|
- cptUsers,
|
|
|
- filterNode,
|
|
|
- defaultProps,
|
|
|
- pageSize,
|
|
|
- currentPage,
|
|
|
- handleSizeChange,
|
|
|
- handleCurrentChange,
|
|
|
- viewUserRoles,
|
|
|
- currentUser,
|
|
|
- roleDialog,
|
|
|
- roles,
|
|
|
- handleClickDeptTreeNode,
|
|
|
- handleSelectRoles,
|
|
|
- saveRoles,
|
|
|
- roleTable,
|
|
|
- beforeAddRole,
|
|
|
- }
|
|
|
- },
|
|
|
+const clickToQuery = () => {
|
|
|
+ queryConditions.total = 0
|
|
|
+ queryConditions.currentPage = 1
|
|
|
+ getAllUsers(queryConditions).then(res => {
|
|
|
+ users.value = res.records
|
|
|
+ queryConditions.total = res.total
|
|
|
+ })
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ clickToQuery()
|
|
|
+ getAllRoles().then((res) => {
|
|
|
+ roles.value = res
|
|
|
+ })
|
|
|
+ getDeptTree().then((res) => {
|
|
|
+ depts.value = res
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+const dropDownSelection = [
|
|
|
+ {code: 1, name: '是'},
|
|
|
+ {code: 2, name: '否'},
|
|
|
+ {code: 9, name: '全部'}
|
|
|
+]
|
|
|
+
|
|
|
</script>
|