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-input v-model="searchData.departmentName" style="width: 120px"></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="'BU'">-->
<!-- <el-input v-model="searchData.buNo" style="width: 120px" placeholder="BU"></el-input>-->
<!-- </el-form-item>-->
<el-form-item :label="' '">
<el-button v-if="!authSearch" @click="getDataList()">Query</el-button>
<el-button v-if="!authSave" type="primary" @click="addModal()">Add</el-button>
@ -32,10 +32,13 @@
</el-form>
<el-table
ref="deptMainTable"
@header-dragend="handleColumnResize"
:height="height"
:height="deptMainTableHeight"
:data="dataList"
border
highlight-current-row
@current-change="onMainDeptCurrentChange"
style="width: 100%;">
<el-table-column
v-for="(item,index) in columnList" :key="index"
@ -56,11 +59,18 @@
fixed="right"
header-align="center"
align="center"
width="100"
width="220"
label="Actions">
<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>
</el-table-column>
</el-table>
@ -75,23 +85,110 @@
layout="total, sizes, prev, pager, next, jumper">
</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-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-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-form-item>
</el-form>
<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-input v-model="modalData.site" style="width: 140px"></el-input>
</el-form-item>
-->
<!-- 本项目不使用 BU保存时 buNo 固定为 *满足后端 site_buNo 解析 -->
<!--
<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>
<el-footer style="height:40px;margin-top: 15px;text-align:center">
<el-button type="primary" @click="saveData()">Save</el-button>
@ -109,13 +206,27 @@ import {
departmentSearch,
departmentDelete
} 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 {EventBus} from "../../../main";
import {updateColumnSize} from "../../../api/table";
import ChooseListEam from '@/views/modules/common/Chooselist_eam.vue'
export default {
components: {
ChooseListEam
},
watch: {
searchData: {
deep: true,
@ -128,10 +239,18 @@ export default {
handler: function (newV, oldV) {
this.modalData.departmentId = this.modalData.departmentId.toUpperCase()
}
},
memberDialogVisible (v) {
if (!v) {
this.memberPickerActive = false
}
}
},
data () {
return {
/** 本项目不使用 BU;新建部门保存时 buNo 传此占位,后端按 site + '_' + buNo 解析 */
departmentDefaultBuNo: '*',
userBuList: [],
//
favorite: false,
// start
@ -152,7 +271,21 @@ export default {
},
responsibleDepartmentList: [],
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,
pageSize: 20,
totalPage: 0,
@ -182,7 +315,7 @@ export default {
columnProp: 'departmentId',
headerAlign: "center",
align: "center",
columnLabel: 'DepartmentId',
columnLabel: 'Department Id',
columnHidden: false,
columnImage: false,
columnSortable: false,
@ -200,7 +333,7 @@ export default {
columnProp: 'departmentName',
headerAlign: "center",
align: "left",
columnLabel: 'DepartmentName',
columnLabel: 'Department Name',
columnHidden: false,
columnImage: false,
columnSortable: false,
@ -209,42 +342,43 @@ export default {
fixed: '',
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,
functionId: 811020,
@ -341,15 +475,14 @@ export default {
trigger: ['blur','change']
}
],
buType:[
{
required: true,
message: ' ',
trigger: ['blur','change']
}
],
// buType:[
// {
// required: true,
// message: ' ',
// trigger: ['blur','change']
// }
// ],
},
// userBuList: [],
authSearch: false,
authSave: 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 () {
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 () {
//
// this.getButtonAuthData()
// site bu
// 使 BU
// this.getSiteAndBuByUserName()
this.getDataList()
//
// this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
@ -381,6 +529,195 @@ export default {
},
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){
let inData= this.columnList.filter(item => item.columnProp === column.property)[0]
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
@ -430,6 +777,7 @@ export default {
this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount
this.clearDeptMemberSelection()
}
})
},
@ -451,6 +799,7 @@ export default {
this.pageIndex = data.page.currPage
this.pageSize = data.page.pageSize
this.totalPage = data.page.totalCount
this.clearDeptMemberSelection()
}
})
},
@ -482,8 +831,7 @@ export default {
this.modalData = {
flag: '1',
site: this.$store.state.user.site,
bu: '',
buNo: '',
bu: this.departmentDefaultBuNo,
departmentId: '',
departmentName: '',
createBy: this.$store.state.user.name,
@ -494,12 +842,10 @@ export default {
},
updateModal (row) {
const buValue = row.buNo || row.bu || '';
this.modalData = {
flag: '2',
site: row.site,
bu: buValue,
buNo: buValue,
bu: row.buNo != null && row.buNo !== '' ? row.buNo : this.departmentDefaultBuNo,
departmentId: row.departmentId,
departmentName: row.departmentName,
createBy: this.$store.state.user.name,
@ -548,16 +894,14 @@ export default {
this.$message.warning('请输入工厂!')
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 = {
...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') {

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')" :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="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="businessRoleAuthorize()">{{ buttons.businessRoleAuthorization || '岗位' }}
</el-button>
@ -180,6 +181,33 @@
</div>
</span>
</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
@ -631,16 +659,17 @@
<script>
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 {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'
export default {
data() {
data () {
return {
//
favorite: false,
@ -655,67 +684,67 @@ export default {
transferData: [],
checked: [],
inputSearch1: '审核权限',
//
//
setUp: {
reviewFlag: false,
saveButton: false,
saveButton: false
},
dataForm: {
userName: '',
userDisplay:''
userDisplay: ''
},
columnList: [
{
userId: this.$store.state.user.name,
serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
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,
columnImage: false,
columnWidth: 70,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
fixed: ''
},
{
userId: this.$store.state.user.name,
serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
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,
columnImage: false,
columnSortable: false,
columnWidth: 20,
sortLv: 0,
status: true,
fixed: '',
fixed: ''
},
{
userId: this.$store.state.user.name,
serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
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,
columnImage: false,
columnSortable: false,
columnWidth: 10,
sortLv: 0,
status: true,
fixed: '',
},
fixed: ''
}
],
buttons: {
cz: '操作',
@ -727,6 +756,7 @@ export default {
factoryAuthorization: '工厂授权',
buAuthorization: 'BU授权',
deptAuthorization: '部门授权',
viewUserDept: '查看部门',
businessRoleAuthorization: '岗位',
createTime: '创建时间',
username: '用户账号',
@ -752,10 +782,10 @@ export default {
dataListLoading: false,
dataListSelections: [],
addOrUpdateVisible: false,
selectBUList:[],
buList:[],
siteList1:[],
siteList2:[],
selectBUList: [],
buList: [],
siteList1: [],
siteList2: [],
siteSelections1: [],
siteSelections2: [],
siteAddModal: false,
@ -765,8 +795,8 @@ export default {
sitename: '',
active: ''
},
buList1:[],
buList2:[],
buList1: [],
buList2: [],
buSelections1: [],
buSelections2: [],
buAddModal: false,
@ -777,6 +807,9 @@ export default {
active: '',
username: ''
},
userDeptModalVisible: false,
userDeptList: [],
userDeptLoading: false,
deptData: {
site: '',
buNo: '',
@ -785,15 +818,15 @@ export default {
active: '',
username: ''
},
deptList1:[],
deptList2:[],
deptList1: [],
deptList2: [],
deptSelections1: [],
deptSelections2: [],
deptAddModal: false,
selectBusinessRoleList:[],
businessRoleList:[],
businessRoleList1:[],
businessRoleList2:[],
selectBusinessRoleList: [],
businessRoleList: [],
businessRoleList1: [],
businessRoleList2: [],
businessRoleSelections1: [],
businessRoleSelections2: [],
businessRoleAddModal: false,
@ -804,24 +837,23 @@ export default {
roleDesc: '',
active: '',
username: ''
},
}
}
},
components: {
AddOrUpdate
},
activated() {
activated () {
this.getDataList()
},
mounted() {
mounted () {
this.favoriteIsOk()
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 () {
return this.$store.state.user.id === 1
}
@ -845,7 +877,7 @@ export default {
favoriteFunction () {
let userFavorite = {
userId: this.$store.state.user.id,
functionId: this.$route.meta.menuId,
functionId: this.$route.meta.menuId
}
if (this.favorite) {
//
@ -913,7 +945,7 @@ export default {
this.siteList2 = data.row2
})
this.siteAddModal = true
//this.searchSiteList()
// this.searchSiteList()
},
/**
@ -952,7 +984,7 @@ export default {
// site
addSite () {
if(this.siteSelections1 == null || this.siteSelections1.length === 0){
if (this.siteSelections1 == null || this.siteSelections1.length === 0) {
this.$message.warning('请选择可选工厂!')
return
}
@ -977,7 +1009,7 @@ export default {
// site
deleteSite () {
if(this.siteSelections2 == null || this.siteSelections2.length === 0){
if (this.siteSelections2 == null || this.siteSelections2.length === 0) {
this.$message.warning('请选择已有工厂!')
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 () {
@ -1230,11 +1285,11 @@ export default {
}
})
},
//
//
businessRoleClickRow1 (row) {
this.$refs.businessRoleTable1.toggleRowSelection(row)
},
//
//
businessRoleClickRow2 (row) {
this.$refs.businessRoleTable2.toggleRowSelection(row)
},
@ -1244,7 +1299,7 @@ export default {
selectionBusinessRole2 (val) {
this.businessRoleSelections2 = val
},
//
//
addBusinessRole () {
if (this.businessRoleSelections1 == null || this.businessRoleSelections1.length === 0) {
this.$message.warning('请选择可选角色!')
@ -1268,7 +1323,7 @@ export default {
}
})
},
//
//
deleteBusinessRole () {
if (this.businessRoleSelections2 == null || this.businessRoleSelections2.length === 0) {
this.$message.warning('请选择已有角色!')
@ -1293,26 +1348,23 @@ export default {
})
},
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++) {
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)
}
saveAccessBU(inList).then(({data}) => {
if (data && data.code === 0) {
this.$message.success( '操作成功')
this.$message.success('操作成功')
this.buVisible = false
} else {
this.$message.error(data.msg)
@ -1322,22 +1374,22 @@ export default {
//
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++) {
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)
}
saveBusinessRole(businessRole).then(({data}) => {
if (data && data.code === 0) {
this.$message.success( '操作成功')
this.$message.success('操作成功')
this.roleVisible = false
} else {
this.$message.error(data.msg)
@ -1345,8 +1397,6 @@ export default {
})
},
//
handleCurrentChange (val) {
this.selectUser = val
@ -1358,24 +1408,24 @@ export default {
let currentList = this.checked
//
if (currentList.length == 0) {
this.$confirm("当前未选择记录,是否继续?", '删除提示', {
this.$confirm('当前未选择记录,是否继续?', '删除提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonText: '取消'
}).then(() => {
let data = {
userId: this.currentData.userId,
userId: this.currentData.userId
}
saveList.push(data)
this.saveUserBusinessRole(saveList)
}).catch(() => {
return
})
} else {
for (let i = 0; i < currentList.length; i++) {
let data = {
userId: this.currentData.userId,
roleItemNo: currentList[i],
selectFlag: 'Y',
selectFlag: 'Y'
}
saveList.push(data)
}
@ -1397,7 +1447,6 @@ export default {
})
},
//
getDataList: throttle(function () {
this.dataListLoading = true
@ -1474,14 +1523,14 @@ export default {
})
},
test() {
test () {
let dto = {
qty:100,
name:'张三'
qty: 100,
name: '张三'
}
this.$http({
url: this.$http.adornUrl('/pms/test/getTdo1'),
method: 'get',
method: 'get'
}).then(({data}) => {
if (data && data.code === 0) {
} else {
@ -1490,7 +1539,7 @@ export default {
})
this.$http({
url: this.$http.adornUrl('/qm/test/list'),
method: 'get',
method: 'get'
}).then(({data}) => {
if (data && data.code === 0) {
} else {
@ -1498,11 +1547,11 @@ export default {
}
})
},
closeDialog() {
closeDialog () {
this.$refs.addOrUpdate.closeDialog()
}
},
},
created() {
created () {
this.getFunctionButtonList()
}
}

Loading…
Cancel
Save