|
|
@ -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 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 本项目不使用 BU,buNo 使用 departmentDefaultBuNo(默认 *) |
|
|
|
|
|
const buNoPart = (this.modalData.bu === '' || this.modalData.bu == null) ? this.departmentDefaultBuNo : this.modalData.bu |
|
|
|
|
|
|
|
|
// 构建后端期望的数据格式 |
|
|
// 构建后端期望的数据格式 |
|
|
let saveData = { |
|
|
let saveData = { |
|
|
...this.modalData, |
|
|
...this.modalData, |
|
|
// 将site和buNo合并成bu字段,后端会进行分割处理 |
|
|
|
|
|
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') { |
|
|
|