Browse Source

feat(sys): 新增部门管理和用户部门查看功能

- 创建accessDept API接口文件,包含成员列表、保存、更新、删除等方法
- 实现完整的部门管理界面,支持部门的增删改查操作
- 添加部门成员管理功能,支持成员的职位、上级设置
- 在用户界面添加查看部门按钮和用户部门详情弹窗
- 实现部门成员表格展示和交互功能
- 集成权限验证和数据导出功能
master
qiankanghui 1 month ago
parent
commit
dc7bc0db7f
  1. 7
      src/api/factory/accessDept.js
  2. 484
      src/views/modules/sys/department.vue
  3. 233
      src/views/modules/sys/user.vue

7
src/api/factory/accessDept.js

@ -0,0 +1,7 @@
import { createAPI } from '@/utils/httpRequest.js'
export const listAccessDeptMembers = data => createAPI('/site/accessDept/listMembers', 'post', data)
export const saveAccessDeptMember = data => createAPI('/site/accessDept/saveMember', 'post', data)
export const updateAccessDeptMember = data => createAPI('/site/accessDept/updateMember', 'post', data)
export const deleteAccessDeptMember = data => createAPI('/site/accessDept/deleteMember', 'post', data)
export const listAccessDeptByUsername = data => createAPI('/site/accessDept/listByUsername', 'post', data)

484
src/views/modules/sys/department.vue

@ -8,9 +8,9 @@
<el-form-item :label="'DepartmentName'"> <el-form-item :label="'DepartmentName'">
<el-input v-model="searchData.departmentName" style="width: 120px"></el-input> <el-input v-model="searchData.departmentName" style="width: 120px"></el-input>
</el-form-item> </el-form-item>
<el-form-item :label="'BU'">
<el-input v-model="searchData.buNo" style="width: 120px" placeholder="BU"></el-input>
</el-form-item>
<!-- <el-form-item :label="'BU'">-->
<!-- <el-input v-model="searchData.buNo" style="width: 120px" placeholder="BU"></el-input>-->
<!-- </el-form-item>-->
<el-form-item :label="' '"> <el-form-item :label="' '">
<el-button v-if="!authSearch" @click="getDataList()">Query</el-button> <el-button v-if="!authSearch" @click="getDataList()">Query</el-button>
<el-button v-if="!authSave" type="primary" @click="addModal()">Add</el-button> <el-button v-if="!authSave" type="primary" @click="addModal()">Add</el-button>
@ -32,10 +32,13 @@
</el-form> </el-form>
<el-table <el-table
ref="deptMainTable"
@header-dragend="handleColumnResize" @header-dragend="handleColumnResize"
:height="height"
:height="deptMainTableHeight"
:data="dataList" :data="dataList"
border border
highlight-current-row
@current-change="onMainDeptCurrentChange"
style="width: 100%;"> style="width: 100%;">
<el-table-column <el-table-column
v-for="(item,index) in columnList" :key="index" v-for="(item,index) in columnList" :key="index"
@ -56,11 +59,18 @@
fixed="right" fixed="right"
header-align="center" header-align="center"
align="center" align="center"
width="100"
width="220"
label="Actions"> label="Actions">
<template slot-scope="scope"> <template slot-scope="scope">
<a v-if="!authUpdate" type="text" size="small" @click="updateModal(scope.row)">Edit |</a>
<a v-if="!authDelete" type="text" size="small" @click="deleteDepartment(scope.row)">Delete</a>
<span v-if="!authUpdate">
<a type="text" size="small" @click="updateModal(scope.row)">Edit</a>
<span v-if="!authDelete || isAuth('sys:user:save')"> | </span>
</span>
<span v-if="!authDelete">
<a type="text" size="small" @click="deleteDepartment(scope.row)">Delete</a>
<span v-if="isAuth('sys:user:save')"> | </span>
</span>
<a v-if="isAuth('sys:user:save')" type="text" size="small" @click.stop="onAddMemberClick(scope.row)">Add Member</a>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -75,23 +85,110 @@
layout="total, sizes, prev, pager, next, jumper"> layout="total, sizes, prev, pager, next, jumper">
</el-pagination> </el-pagination>
<div style="margin-top: 14px; font-size: 13px; font-weight: 600; color: #303133">部门成员</div>
<div v-if="currentDept" style="margin-top: 6px; font-size: 12px; color: #666">
<!-- 本项目不使用 BU不展示 buNo -->
当前部门{{ currentDept.site }} / {{ currentDept.departmentId }}
<span v-if="currentDept.departmentName"> {{ currentDept.departmentName }}</span>
</div>
<div v-else style="margin-top: 6px; font-size: 12px; color: #999">请在上方部门列表中点击一行或使用操作列新增成员选择部门</div>
<el-table
:height="memberTableHeight"
:data="memberList"
border
v-loading="memberLoading"
style="margin-top: 8px; width: 100%;">
<el-table-column
v-if="isAuth('sys:user:save')"
fixed="left"
header-align="center"
align="center"
width="130"
label="Actions">
<template slot-scope="scope">
<a type="text" size="small" @click="openEditMember(scope.row)">edit</a>
<a type="text" size="small" style="margin-left: 8px" @click="removeMember(scope.row)">delete</a>
</template>
</el-table-column>
<el-table-column prop="username" header-align="center" align="center" min-width="120" label="UserName"></el-table-column>
<el-table-column prop="jobTitle" header-align="center" align="left" min-width="120" label="Job Title" show-overflow-tooltip></el-table-column>
<el-table-column prop="deptManagerFlag" header-align="center" align="center" width="100" label="Dept Manager"></el-table-column>
<el-table-column prop="superiorUsername" header-align="center" align="center" min-width="120" label="Superior"></el-table-column>
</el-table>
<el-dialog
:title="memberDialogTitle"
:close-on-click-modal="false"
v-drag
:visible.sync="memberDialogVisible"
width="450px"
append-to-body>
<el-form :model="memberForm" label-position="top" size="small" style="margin-left: 7px; margin-top: -5px;">
<el-form-item v-if="memberFormMode === 'add'" required>
<span slot="label">
<a class="customer-a" @click.prevent="openMemberUserChooser">UserName</a>
</span>
<el-input v-model="memberForm.username" readonly placeholder="" style="width: 100%"></el-input>
</el-form-item>
<el-form-item v-else label="UserName">
<el-input v-model="memberForm.username" disabled style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="Job Title">
<el-input v-model="memberForm.jobTitle" clearable style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="Dept Manager">
<el-select v-model="memberForm.deptManagerFlag" placeholder="" style="width: 100%">
<el-option label="No" value="N"></el-option>
<el-option label="Yes" value="Y"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Superior">
<el-select v-model="memberForm.superiorUsername" clearable filterable placeholder="Optional" style="width: 100%">
<el-option
v-for="u in superiorOptions"
:key="u"
:label="u"
:value="u">
</el-option>
</el-select>
</el-form-item>
</el-form>
<el-footer style="height:40px;margin-top: 15px;text-align:center">
<el-button type="primary" @click="submitMember">Save</el-button>
<el-button type="primary" @click="memberDialogVisible = false">Cancel</el-button>
</el-footer>
</el-dialog>
<choose-list-eam ref="memberBaseList" @getBaseData="getMemberBaseData"></choose-list-eam>
<el-dialog title="Department" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="450px"> <el-dialog title="Department" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="450px">
<el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;"> <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
<el-form-item label="DepartmentId" prop="departmentId" :rules="rules.departmentIdType">
<el-form-item label="Department Id" prop="departmentId" :rules="rules.departmentIdType">
<el-input v-model="modalData.departmentId" :disabled="modalDisableFlag" style="width: 140px"></el-input> <el-input v-model="modalData.departmentId" :disabled="modalDisableFlag" style="width: 140px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="DepartmentName" prop="departmentName" style="margin-left: 15px" :rules="rules.departmentNameType">
<el-form-item label="Department Name" prop="departmentName" style="margin-left: 15px" :rules="rules.departmentNameType">
<el-input v-model="modalData.departmentName" style="width: 230px"></el-input> <el-input v-model="modalData.departmentName" style="width: 230px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: 5px;"> <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: 5px;">
<!-- Site -->
<!--
<el-form-item label="Site" prop="site" :rules="rules.siteType"> <el-form-item label="Site" prop="site" :rules="rules.siteType">
<el-input v-model="modalData.site" style="width: 140px"></el-input> <el-input v-model="modalData.site" style="width: 140px"></el-input>
</el-form-item> </el-form-item>
-->
<!-- 本项目不使用 BU保存时 buNo 固定为 *满足后端 site_buNo 解析 -->
<!--
<el-form-item label="BU" prop="bu" style="margin-left: 15px" :rules="rules.buType"> <el-form-item label="BU" prop="bu" style="margin-left: 15px" :rules="rules.buType">
<el-input v-model="modalData.bu" style="width: 230px"></el-input>
<el-select v-model="modalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 230px">
<el-option v-for="i in userBuList" :key="i.buNo" :label="i.buNo" :value="i.buNo"><span style="float:left;width:120px">{{ i.buNo }}</span>
<span style="float:right; color:#8492a6; font-size:11px; width:80px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis">{{ i.buDesc }}</span>
</el-option>
</el-select>
</el-form-item> </el-form-item>
-->
</el-form> </el-form>
<el-footer style="height:40px;margin-top: 15px;text-align:center"> <el-footer style="height:40px;margin-top: 15px;text-align:center">
<el-button type="primary" @click="saveData()">Save</el-button> <el-button type="primary" @click="saveData()">Save</el-button>
@ -109,13 +206,27 @@ import {
departmentSearch, departmentSearch,
departmentDelete departmentDelete
} from "@/api/department.js" } from "@/api/department.js"
import {
listAccessDeptMembers,
saveAccessDeptMember,
updateAccessDeptMember,
deleteAccessDeptMember
} from '@/api/factory/accessDept.js'
import { searchUserList } from '@/api/taskManage/task.js'
import { isAuth } from '@/utils'
// import { getSiteAndBuByUserName } from "@/api/auditManagement/auditIndicator.js"
import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js" import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js"
import {EventBus} from "../../../main"; import {EventBus} from "../../../main";
import {updateColumnSize} from "../../../api/table"; import {updateColumnSize} from "../../../api/table";
import ChooseListEam from '@/views/modules/common/Chooselist_eam.vue'
export default { export default {
components: {
ChooseListEam
},
watch: { watch: {
searchData: { searchData: {
deep: true, deep: true,
@ -128,10 +239,18 @@ export default {
handler: function (newV, oldV) { handler: function (newV, oldV) {
this.modalData.departmentId = this.modalData.departmentId.toUpperCase() this.modalData.departmentId = this.modalData.departmentId.toUpperCase()
} }
},
memberDialogVisible (v) {
if (!v) {
this.memberPickerActive = false
}
} }
}, },
data () { data () {
return { return {
/** 本项目不使用 BU;新建部门保存时 buNo 传此占位,后端按 site + '_' + buNo 解析 */
departmentDefaultBuNo: '*',
userBuList: [],
// //
favorite: false, favorite: false,
// start // start
@ -152,7 +271,21 @@ export default {
}, },
responsibleDepartmentList: [], responsibleDepartmentList: [],
selectTypeFlag: [], selectTypeFlag: [],
height: 200,
deptMainTableHeight: 220,
memberTableHeight: 260,
currentDept: null,
memberList: [],
memberLoading: false,
memberDialogVisible: false,
memberDialogTitle: '',
memberFormMode: 'add',
memberForm: {
username: '',
jobTitle: '',
deptManagerFlag: 'N',
superiorUsername: ''
},
memberPickerActive: false,
pageIndex: 1, pageIndex: 1,
pageSize: 20, pageSize: 20,
totalPage: 0, totalPage: 0,
@ -182,7 +315,7 @@ export default {
columnProp: 'departmentId', columnProp: 'departmentId',
headerAlign: "center", headerAlign: "center",
align: "center", align: "center",
columnLabel: 'DepartmentId',
columnLabel: 'Department Id',
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
@ -200,7 +333,7 @@ export default {
columnProp: 'departmentName', columnProp: 'departmentName',
headerAlign: "center", headerAlign: "center",
align: "left", align: "left",
columnLabel: 'DepartmentName',
columnLabel: 'Department Name',
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
@ -209,42 +342,43 @@ export default {
fixed: '', fixed: '',
columnWidth: 120, columnWidth: 120,
}, },
{
userId: this.$store.state.user.name,
functionId: 811020,
serialNumber: '811020Table1Site',
tableId: "811020Table1",
tableName: "部门管理表",
columnProp: 'site',
headerAlign: "center",
align: "left",
columnLabel: 'Site',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},
{
userId: this.$store.state.user.name,
functionId: 811020,
serialNumber: '811020Table1Bu',
tableId: "811020Table1",
tableName: "部门管理表",
columnProp: 'buNo',
headerAlign: "center",
align: "left",
columnLabel: 'BU',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 160,
},
// {
// userId: this.$store.state.user.name,
// functionId: 811020,
// serialNumber: '811020Table1Site',
// tableId: "811020Table1",
// tableName: "",
// columnProp: 'site',
// headerAlign: "center",
// align: "left",
// columnLabel: 'Site',
// columnHidden: false,
// columnImage: false,
// columnSortable: false,
// sortLv: 0,
// status: true,
// fixed: '',
// columnWidth: 140,
// },
// 使 BU
// {
// userId: this.$store.state.user.name,
// functionId: 811020,
// serialNumber: '811020Table1Bu',
// tableId: "811020Table1",
// tableName: "",
// columnProp: 'buNo',
// headerAlign: "center",
// align: "left",
// columnLabel: 'BU',
// columnHidden: false,
// columnImage: false,
// columnSortable: false,
// sortLv: 0,
// status: true,
// fixed: '',
// columnWidth: 160,
// },
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
functionId: 811020, functionId: 811020,
@ -341,15 +475,14 @@ export default {
trigger: ['blur','change'] trigger: ['blur','change']
} }
], ],
buType:[
{
required: true,
message: ' ',
trigger: ['blur','change']
}
],
// buType:[
// {
// required: true,
// message: ' ',
// trigger: ['blur','change']
// }
// ],
}, },
// userBuList: [],
authSearch: false, authSearch: false,
authSave: false, authSave: false,
authUpdate: false, authUpdate: false,
@ -358,9 +491,23 @@ export default {
} }
}, },
computed: {
superiorOptions () {
if (!this.memberList || !this.memberList.length) {
return []
}
const self = (this.memberForm.username || '').trim().toLowerCase()
return this.memberList
.map(r => r.username)
.filter(u => u && u.trim().toLowerCase() !== self)
}
},
mounted () { mounted () {
this.$nextTick(() => { this.$nextTick(() => {
this.height = window.innerHeight - 210
const h = window.innerHeight
this.deptMainTableHeight = Math.max(180, Math.floor(h * 0.32))
this.memberTableHeight = Math.max(200, Math.floor(h * 0.4))
}) })
}, },
@ -371,8 +518,9 @@ export default {
created () { created () {
// //
// this.getButtonAuthData() // this.getButtonAuthData()
// site bu
// 使 BU
// this.getSiteAndBuByUserName() // this.getSiteAndBuByUserName()
this.getDataList()
// //
// this.getTableUserColumn(this.$route.meta.menuId+'table1',1) // this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
@ -381,6 +529,195 @@ export default {
}, },
methods: { methods: {
isAuth,
clearDeptMemberSelection () {
this.currentDept = null
this.memberList = []
this.$nextTick(() => {
if (this.$refs.deptMainTable) {
this.$refs.deptMainTable.setCurrentRow(null)
}
})
},
onMainDeptCurrentChange (row) {
this.currentDept = row
this.memberList = []
if (row) {
this.loadMembers()
}
},
onAddMemberClick (row) {
this.currentDept = row
this.$nextTick(() => {
if (this.$refs.deptMainTable) {
this.$refs.deptMainTable.setCurrentRow(row)
}
this.loadMembers().then(() => {
this.openAddMember()
})
})
},
loadMembers () {
if (!this.currentDept) {
return Promise.resolve()
}
this.memberLoading = true
return listAccessDeptMembers({
site: this.currentDept.site,
buNo: this.currentDept.buNo,
departmentId: this.currentDept.departmentId
}).then(({ data }) => {
this.memberLoading = false
if (data && data.code === 0) {
this.memberList = data.list || []
} else {
this.memberList = []
if (data && data.msg) {
this.$message.error(data.msg)
}
}
}).catch(() => {
this.memberLoading = false
this.memberList = []
})
},
openAddMember () {
if (!this.currentDept) {
this.$message.warning('Please select a department first')
return
}
this.memberFormMode = 'add'
this.memberDialogTitle = 'Add Member'
this.memberForm = {
username: '',
jobTitle: '',
deptManagerFlag: 'N',
superiorUsername: ''
}
this.memberDialogVisible = true
},
openEditMember (row) {
if (!this.currentDept) return
this.memberFormMode = 'edit'
this.memberDialogTitle = 'Edit Member'
const dm = (row.deptManagerFlag || 'N').toString().toUpperCase()
this.memberForm = {
username: row.username,
jobTitle: row.jobTitle || '',
deptManagerFlag: dm === 'Y' ? 'Y' : 'N',
superiorUsername: row.superiorUsername || ''
}
this.memberDialogVisible = true
},
openMemberUserChooser () {
if (!this.currentDept || !this.currentDept.site) {
this.$message.warning('Please select a department first')
return
}
this.memberPickerActive = true
this.$nextTick(() => {
const strVal = (this.memberForm.username || '').trim()
if (this.$refs.memberBaseList) {
this.$refs.memberBaseList.init(519, strVal, '')
}
})
},
getMemberBaseData (val) {
if (!this.memberPickerActive) return
this.memberPickerActive = false
if (val && val.username) {
this.memberForm.username = val.username
}
},
verifyUserExistsInSite (username) {
const u = (username || '').trim()
if (!u || !this.currentDept || !this.currentDept.site) {
return Promise.resolve(false)
}
return searchUserList({
site: this.currentDept.site,
username: u
}).then(({ data }) => {
if (data && data.code === 0) {
const rows = data.rows || []
return rows.some(r => (r.username || '').trim().toLowerCase() === u.toLowerCase())
}
return false
}).catch(() => false)
},
submitMember () {
if (!this.currentDept) return
const username = (this.memberForm.username || '').trim()
if (!username) {
this.$message.warning('Please pick an account (click Account)')
return
}
const payload = {
site: this.currentDept.site,
buNo: this.currentDept.buNo,
departmentId: this.currentDept.departmentId,
username,
jobTitle: this.memberForm.jobTitle || '',
deptManagerFlag: this.memberForm.deptManagerFlag === 'Y' ? 'Y' : 'N',
superiorUsername: this.memberForm.superiorUsername || ''
}
const doSave = () => {
const req = this.memberFormMode === 'add' ? saveAccessDeptMember(payload) : updateAccessDeptMember(payload)
req.then(({ data }) => {
if (data && data.code === 0) {
this.$message.success('Saved')
this.memberDialogVisible = false
this.loadMembers()
} else {
this.$message.error((data && data.msg) || 'Save failed')
}
}).catch(e => {
const msg = (e.response && e.response.data && e.response.data.msg) || e.message || 'Save failed'
this.$message.error(msg)
})
}
if (this.memberFormMode === 'add') {
this.verifyUserExistsInSite(username).then(exists => {
if (!exists) {
this.$message.warning('User does not exist or has no access to this site')
return
}
const dup = this.memberList.some(m => (m.username || '').trim().toLowerCase() === username.toLowerCase())
if (dup) {
this.$message.warning('This member is already in the department')
return
}
doSave()
})
return
}
doSave()
},
removeMember (row) {
if (!this.currentDept) return
this.$confirm('确定从该部门移除「' + row.username + '」?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteAccessDeptMember({
site: this.currentDept.site,
buNo: this.currentDept.buNo,
departmentId: this.currentDept.departmentId,
username: row.username
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message.success('已删除')
this.loadMembers()
} else {
this.$message.error((data && data.msg) || '删除失败')
}
}).catch(e => {
const msg = (e.response && e.response.data && e.response.data.msg) || e.message || '删除失败'
this.$message.error(msg)
})
}).catch(() => {})
},
handleColumnResize(newWidth, oldWidth, column, event){ handleColumnResize(newWidth, oldWidth, column, event){
let inData= this.columnList.filter(item => item.columnProp === column.property)[0] let inData= this.columnList.filter(item => item.columnProp === column.property)[0]
inData.columnWidth=newWidth inData.columnWidth=newWidth
@ -392,6 +729,16 @@ export default {
// }) // })
}, },
// getSiteAndBuByUserName () {
// let tempData = {
// username: this.$store.state.user.name
// }
// getSiteAndBuByUserName(tempData).then(({ data }) => {
// if (data.code === 0) {
// this.userBuList = data.rows
// }
// })
// },
//excel //excel
@ -430,6 +777,7 @@ export default {
this.pageIndex = data.page.currPage this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount this.totalPage = data.page.totalCount
this.clearDeptMemberSelection()
} }
}) })
}, },
@ -451,6 +799,7 @@ export default {
this.pageIndex = data.page.currPage this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount this.totalPage = data.page.totalCount
this.clearDeptMemberSelection()
} }
}) })
}, },
@ -482,8 +831,7 @@ export default {
this.modalData = { this.modalData = {
flag: '1', flag: '1',
site: this.$store.state.user.site, site: this.$store.state.user.site,
bu: '',
buNo: '',
bu: this.departmentDefaultBuNo,
departmentId: '', departmentId: '',
departmentName: '', departmentName: '',
createBy: this.$store.state.user.name, createBy: this.$store.state.user.name,
@ -494,12 +842,10 @@ export default {
}, },
updateModal (row) { updateModal (row) {
const buValue = row.buNo || row.bu || '';
this.modalData = { this.modalData = {
flag: '2', flag: '2',
site: row.site, site: row.site,
bu: buValue,
buNo: buValue,
bu: row.buNo != null && row.buNo !== '' ? row.buNo : this.departmentDefaultBuNo,
departmentId: row.departmentId, departmentId: row.departmentId,
departmentName: row.departmentName, departmentName: row.departmentName,
createBy: this.$store.state.user.name, createBy: this.$store.state.user.name,
@ -548,16 +894,14 @@ export default {
this.$message.warning('请输入工厂!') this.$message.warning('请输入工厂!')
return return
} }
if (this.modalData.bu === '' || this.modalData.bu == null) {
this.$message.warning('请输入BU!')
return
}
// 使 BUbuNo 使 departmentDefaultBuNo *
const buNoPart = (this.modalData.bu === '' || this.modalData.bu == null) ? this.departmentDefaultBuNo : this.modalData.bu
// //
let saveData = { let saveData = {
...this.modalData, ...this.modalData,
// sitebuNobu
bu: `${this.modalData.site}_${this.modalData.bu}`
// site buNo bu split Java buNo
bu: `${this.modalData.site}_${buNoPart}`
}; };
if (this.modalData.flag === '1') { if (this.modalData.flag === '1') {

233
src/views/modules/sys/user.vue

@ -12,6 +12,7 @@
<el-button v-if="isAuth('sys:user:save')" type="primary" @click="addOrUpdateHandle()">{{ buttons.add || '新增' }}</el-button> <el-button v-if="isAuth('sys:user:save')" type="primary" @click="addOrUpdateHandle()">{{ buttons.add || '新增' }}</el-button>
<el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="siteAuthorize()">{{ buttons.factoryAuthorization || '工厂授权' }}</el-button> <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="siteAuthorize()">{{ buttons.factoryAuthorization || '工厂授权' }}</el-button>
<el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="buAuthorize()">{{ buttons.buAuthorization || 'BU授权' }}</el-button> <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="buAuthorize()">{{ buttons.buAuthorization || 'BU授权' }}</el-button>
<el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="viewUserDept()">{{ buttons.viewUserDept || '查看部门' }}</el-button>
<el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="deptAuthorize()">{{ buttons.deptAuthorization || '部门授权' }}</el-button> <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="deptAuthorize()">{{ buttons.deptAuthorization || '部门授权' }}</el-button>
<el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="businessRoleAuthorize()">{{ buttons.businessRoleAuthorization || '岗位' }} <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary" @click="businessRoleAuthorize()">{{ buttons.businessRoleAuthorization || '岗位' }}
</el-button> </el-button>
@ -180,6 +181,33 @@
</div> </div>
</span> </span>
</el-dialog> </el-dialog>
<!-- 查看用户部门Access_dept -->
<el-dialog
:title="'用户部门 — ' + (selectUser && selectUser.username ? selectUser.username : '')"
:close-on-click-modal="false"
v-drag
:visible.sync="userDeptModalVisible"
width="900px"
append-to-body>
<el-table
:data="userDeptList"
border
v-loading="userDeptLoading"
height="400"
style="width: 100%">
<el-table-column prop="site" header-align="center" align="center" min-width="70" label="工厂"></el-table-column>
<el-table-column prop="buNo" header-align="center" align="center" min-width="80" label="BU"></el-table-column>
<el-table-column prop="buDesc" header-align="center" align="left" min-width="100" label="BU名称" show-overflow-tooltip></el-table-column>
<el-table-column prop="departmentId" header-align="center" align="center" min-width="90" label="部门编码"></el-table-column>
<el-table-column prop="departmentName" header-align="center" align="left" min-width="100" label="部门名称" show-overflow-tooltip></el-table-column>
<el-table-column prop="jobTitle" header-align="center" align="left" min-width="90" label="职称" show-overflow-tooltip></el-table-column>
<el-table-column prop="deptManagerFlag" header-align="center" align="center" width="90" label="部门经理"></el-table-column>
<el-table-column prop="superiorUsername" header-align="center" align="center" min-width="90" label="上级"></el-table-column>
</el-table>
<el-footer style="height:40px;margin-top: 16px;text-align:center">
<el-button type="primary" @click="userDeptModalVisible = false">关闭</el-button>
</el-footer>
</el-dialog>
<!-- 岗位 --> <!-- 岗位 -->
<el-dialog <el-dialog
@ -631,16 +659,17 @@
<script> <script>
import {getSiteList, addUserSite, delUserSite, getSite, getBuList, addUserBu, delUserBu, getBu, getDeptList, addUserDept, delUserDept, getDept, getBusinessRole, getBusinessRoleList, addUserBusinessRole, delUserBusinessRole} from '@/api/factory/site.js' import {getSiteList, addUserSite, delUserSite, getSite, getBuList, addUserBu, delUserBu, getBu, getDeptList, addUserDept, delUserDept, getDept, getBusinessRole, getBusinessRoleList, addUserBusinessRole, delUserBusinessRole} from '@/api/factory/site.js'
import {searchAccessBuList,saveAccessBU,saveBusinessRole} from '@/api/base/site.js'
import { listAccessDeptByUsername } from '@/api/factory/accessDept.js'
import {saveAccessBU, saveBusinessRole} from '@/api/base/site.js'
import AddOrUpdate from './user-add-or-update' import AddOrUpdate from './user-add-or-update'
import {getUserBusinessRoleList, saveUserBusinessRole,} from '@/api/auditManagement/auditType.js'
import {getUserSpecialSecurity, saveUserSpecialSecurity, updateUserSpecialSecurity} from '@/api/factory/userSpecialSecurity.js'
import {debounce, throttle} from "../../../utils/common";
import {searchFunctionButtonList} from "@/api/sysLanguage.js"
import {saveUserBusinessRole} from '@/api/auditManagement/auditType.js'
import {updateUserSpecialSecurity} from '@/api/factory/userSpecialSecurity.js'
import {throttle} from '../../../utils/common'
import {searchFunctionButtonList} from '@/api/sysLanguage.js'
import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js' import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
export default { export default {
data() {
data () {
return { return {
// //
favorite: false, favorite: false,
@ -655,67 +684,67 @@ export default {
transferData: [], transferData: [],
checked: [], checked: [],
inputSearch1: '审核权限', inputSearch1: '审核权限',
//
//
setUp: { setUp: {
reviewFlag: false, reviewFlag: false,
saveButton: false,
saveButton: false
}, },
dataForm: { dataForm: {
userName: '', userName: '',
userDisplay:''
userDisplay: ''
}, },
columnList: [ columnList: [
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc', serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
tableId: this.$route.meta.menuId + 'security', tableId: this.$route.meta.menuId + 'security',
tableName: "securityTable",
columnProp: "securitydesc",
headerAlign: "center",
align: "left",
columnLabel: "参数描述",
tableName: 'securityTable',
columnProp: 'securitydesc',
headerAlign: 'center',
align: 'left',
columnLabel: '参数描述',
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnWidth: 70, columnWidth: 70,
columnSortable: false, columnSortable: false,
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '',
fixed: ''
}, },
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc', serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
tableId: this.$route.meta.menuId + 'security', tableId: this.$route.meta.menuId + 'security',
tableName: "securityTable",
columnProp: "module",
headerAlign: "center",
align: "left",
columnLabel: "模块",
tableName: 'securityTable',
columnProp: 'module',
headerAlign: 'center',
align: 'left',
columnLabel: '模块',
columnHidden: false, columnHidden: false,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
columnWidth: 20, columnWidth: 20,
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '',
fixed: ''
}, },
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc', serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
tableId: this.$route.meta.menuId + 'security', tableId: this.$route.meta.menuId + 'security',
tableName: "securityTable",
columnProp: "itemvalue",
headerAlign: "center",
align: "center",
columnLabel: "参数值",
tableName: 'securityTable',
columnProp: 'itemvalue',
headerAlign: 'center',
align: 'center',
columnLabel: '参数值',
columnHidden: true, columnHidden: true,
columnImage: false, columnImage: false,
columnSortable: false, columnSortable: false,
columnWidth: 10, columnWidth: 10,
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '',
},
fixed: ''
}
], ],
buttons: { buttons: {
cz: '操作', cz: '操作',
@ -727,6 +756,7 @@ export default {
factoryAuthorization: '工厂授权', factoryAuthorization: '工厂授权',
buAuthorization: 'BU授权', buAuthorization: 'BU授权',
deptAuthorization: '部门授权', deptAuthorization: '部门授权',
viewUserDept: '查看部门',
businessRoleAuthorization: '岗位', businessRoleAuthorization: '岗位',
createTime: '创建时间', createTime: '创建时间',
username: '用户账号', username: '用户账号',
@ -752,10 +782,10 @@ export default {
dataListLoading: false, dataListLoading: false,
dataListSelections: [], dataListSelections: [],
addOrUpdateVisible: false, addOrUpdateVisible: false,
selectBUList:[],
buList:[],
siteList1:[],
siteList2:[],
selectBUList: [],
buList: [],
siteList1: [],
siteList2: [],
siteSelections1: [], siteSelections1: [],
siteSelections2: [], siteSelections2: [],
siteAddModal: false, siteAddModal: false,
@ -765,8 +795,8 @@ export default {
sitename: '', sitename: '',
active: '' active: ''
}, },
buList1:[],
buList2:[],
buList1: [],
buList2: [],
buSelections1: [], buSelections1: [],
buSelections2: [], buSelections2: [],
buAddModal: false, buAddModal: false,
@ -777,6 +807,9 @@ export default {
active: '', active: '',
username: '' username: ''
}, },
userDeptModalVisible: false,
userDeptList: [],
userDeptLoading: false,
deptData: { deptData: {
site: '', site: '',
buNo: '', buNo: '',
@ -785,15 +818,15 @@ export default {
active: '', active: '',
username: '' username: ''
}, },
deptList1:[],
deptList2:[],
deptList1: [],
deptList2: [],
deptSelections1: [], deptSelections1: [],
deptSelections2: [], deptSelections2: [],
deptAddModal: false, deptAddModal: false,
selectBusinessRoleList:[],
businessRoleList:[],
businessRoleList1:[],
businessRoleList2:[],
selectBusinessRoleList: [],
businessRoleList: [],
businessRoleList1: [],
businessRoleList2: [],
businessRoleSelections1: [], businessRoleSelections1: [],
businessRoleSelections2: [], businessRoleSelections2: [],
businessRoleAddModal: false, businessRoleAddModal: false,
@ -804,24 +837,23 @@ export default {
roleDesc: '', roleDesc: '',
active: '', active: '',
username: '' username: ''
},
}
} }
}, },
components: { components: {
AddOrUpdate AddOrUpdate
}, },
activated() {
activated () {
this.getDataList() this.getDataList()
}, },
mounted() {
mounted () {
this.favoriteIsOk() this.favoriteIsOk()
this.$nextTick(() => { this.$nextTick(() => {
this.securityHeight = window.innerHeight - 300;
this.height = window.innerHeight - 200;
this.securityHeight = window.innerHeight - 300
this.height = window.innerHeight - 200
}) })
}, },
computed:{
computed: {
adminUser () { adminUser () {
return this.$store.state.user.id === 1 return this.$store.state.user.id === 1
} }
@ -845,7 +877,7 @@ export default {
favoriteFunction () { favoriteFunction () {
let userFavorite = { let userFavorite = {
userId: this.$store.state.user.id, userId: this.$store.state.user.id,
functionId: this.$route.meta.menuId,
functionId: this.$route.meta.menuId
} }
if (this.favorite) { if (this.favorite) {
// //
@ -913,7 +945,7 @@ export default {
this.siteList2 = data.row2 this.siteList2 = data.row2
}) })
this.siteAddModal = true this.siteAddModal = true
//this.searchSiteList()
// this.searchSiteList()
}, },
/** /**
@ -952,7 +984,7 @@ export default {
// site // site
addSite () { addSite () {
if(this.siteSelections1 == null || this.siteSelections1.length === 0){
if (this.siteSelections1 == null || this.siteSelections1.length === 0) {
this.$message.warning('请选择可选工厂!') this.$message.warning('请选择可选工厂!')
return return
} }
@ -977,7 +1009,7 @@ export default {
// site // site
deleteSite () { deleteSite () {
if(this.siteSelections2 == null || this.siteSelections2.length === 0){
if (this.siteSelections2 == null || this.siteSelections2.length === 0) {
this.$message.warning('请选择已有工厂!') this.$message.warning('请选择已有工厂!')
return return
} }
@ -1104,6 +1136,29 @@ export default {
} }
}) })
}, },
viewUserDept () {
if (!this.selectUser || !this.selectUser.username) {
this.$message.warning('请先在列表中选中用户')
return
}
this.userDeptLoading = true
this.userDeptList = []
this.userDeptModalVisible = true
listAccessDeptByUsername({ username: this.selectUser.username }).then(({ data }) => {
this.userDeptLoading = false
if (data && data.code === 0) {
this.userDeptList = data.list || []
} else {
this.userDeptList = []
if (data && data.msg) {
this.$message.error(data.msg)
}
}
}).catch(() => {
this.userDeptLoading = false
this.userDeptList = []
})
},
// //
deptAuthorize () { deptAuthorize () {
@ -1230,11 +1285,11 @@ export default {
} }
}) })
}, },
//
//
businessRoleClickRow1 (row) { businessRoleClickRow1 (row) {
this.$refs.businessRoleTable1.toggleRowSelection(row) this.$refs.businessRoleTable1.toggleRowSelection(row)
}, },
//
//
businessRoleClickRow2 (row) { businessRoleClickRow2 (row) {
this.$refs.businessRoleTable2.toggleRowSelection(row) this.$refs.businessRoleTable2.toggleRowSelection(row)
}, },
@ -1244,7 +1299,7 @@ export default {
selectionBusinessRole2 (val) { selectionBusinessRole2 (val) {
this.businessRoleSelections2 = val this.businessRoleSelections2 = val
}, },
//
//
addBusinessRole () { addBusinessRole () {
if (this.businessRoleSelections1 == null || this.businessRoleSelections1.length === 0) { if (this.businessRoleSelections1 == null || this.businessRoleSelections1.length === 0) {
this.$message.warning('请选择可选角色!') this.$message.warning('请选择可选角色!')
@ -1268,7 +1323,7 @@ export default {
} }
}) })
}, },
//
//
deleteBusinessRole () { deleteBusinessRole () {
if (this.businessRoleSelections2 == null || this.businessRoleSelections2.length === 0) { if (this.businessRoleSelections2 == null || this.businessRoleSelections2.length === 0) {
this.$message.warning('请选择已有角色!') this.$message.warning('请选择已有角色!')
@ -1293,26 +1348,23 @@ export default {
}) })
}, },
saveBuAssessSite () { saveBuAssessSite () {
if(this.selectBUList.length == 0){
this.$message.warning("请选择BU")
return false;
if (this.selectBUList.length == 0) {
this.$message.warning('请选择BU')
return false
} }
let inList=[];
let inList = []
for (let i = 0; i < this.selectBUList.length; i++) { for (let i = 0; i < this.selectBUList.length; i++) {
let inData={
site:this.$store.state.user.site,
username:this.selectUser.username,
buNo:this.selectBUList[i]
let inData = {
site: this.$store.state.user.site,
username: this.selectUser.username,
buNo: this.selectBUList[i]
} }
inList.push(inData) inList.push(inData)
} }
saveAccessBU(inList).then(({data}) => { saveAccessBU(inList).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success( '操作成功')
this.$message.success('操作成功')
this.buVisible = false this.buVisible = false
} else { } else {
this.$message.error(data.msg) this.$message.error(data.msg)
@ -1322,22 +1374,22 @@ export default {
// //
saveBusinessRoleSite () { saveBusinessRoleSite () {
if(this.selectBusinessRoleList.length==0){
this.$message.warning("请选择角色")
return false;
if (this.selectBusinessRoleList.length == 0) {
this.$message.warning('请选择角色')
return false
} }
let businessRole=[];
let businessRole = []
for (let i = 0; i < this.selectBusinessRoleList.length; i++) { for (let i = 0; i < this.selectBusinessRoleList.length; i++) {
let inData={
site:this.$store.state.user.site,
username:this.selectUser.username,
roleNo:this.selectBusinessRoleList[i]
let inData = {
site: this.$store.state.user.site,
username: this.selectUser.username,
roleNo: this.selectBusinessRoleList[i]
} }
businessRole.push(inData) businessRole.push(inData)
} }
saveBusinessRole(businessRole).then(({data}) => { saveBusinessRole(businessRole).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success( '操作成功')
this.$message.success('操作成功')
this.roleVisible = false this.roleVisible = false
} else { } else {
this.$message.error(data.msg) this.$message.error(data.msg)
@ -1345,8 +1397,6 @@ export default {
}) })
}, },
// //
handleCurrentChange (val) { handleCurrentChange (val) {
this.selectUser = val this.selectUser = val
@ -1358,24 +1408,24 @@ export default {
let currentList = this.checked let currentList = this.checked
// //
if (currentList.length == 0) { if (currentList.length == 0) {
this.$confirm("当前未选择记录,是否继续?", '删除提示', {
this.$confirm('当前未选择记录,是否继续?', '删除提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonText: '取消'
}).then(() => { }).then(() => {
let data = { let data = {
userId: this.currentData.userId,
userId: this.currentData.userId
} }
saveList.push(data) saveList.push(data)
this.saveUserBusinessRole(saveList) this.saveUserBusinessRole(saveList)
}).catch(() => { }).catch(() => {
return
}) })
} else { } else {
for (let i = 0; i < currentList.length; i++) { for (let i = 0; i < currentList.length; i++) {
let data = { let data = {
userId: this.currentData.userId, userId: this.currentData.userId,
roleItemNo: currentList[i], roleItemNo: currentList[i],
selectFlag: 'Y',
selectFlag: 'Y'
} }
saveList.push(data) saveList.push(data)
} }
@ -1397,7 +1447,6 @@ export default {
}) })
}, },
// //
getDataList: throttle(function () { getDataList: throttle(function () {
this.dataListLoading = true this.dataListLoading = true
@ -1474,14 +1523,14 @@ export default {
}) })
}, },
test() {
test () {
let dto = { let dto = {
qty:100,
name:'张三'
qty: 100,
name: '张三'
} }
this.$http({ this.$http({
url: this.$http.adornUrl('/pms/test/getTdo1'), url: this.$http.adornUrl('/pms/test/getTdo1'),
method: 'get',
method: 'get'
}).then(({data}) => { }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
} else { } else {
@ -1490,7 +1539,7 @@ export default {
}) })
this.$http({ this.$http({
url: this.$http.adornUrl('/qm/test/list'), url: this.$http.adornUrl('/qm/test/list'),
method: 'get',
method: 'get'
}).then(({data}) => { }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
} else { } else {
@ -1498,11 +1547,11 @@ export default {
} }
}) })
}, },
closeDialog() {
closeDialog () {
this.$refs.addOrUpdate.closeDialog() this.$refs.addOrUpdate.closeDialog()
},
}
}, },
created() {
created () {
this.getFunctionButtonList() this.getFunctionButtonList()
} }
} }

Loading…
Cancel
Save