196 lines
8.0 KiB
JavaScript
196 lines
8.0 KiB
JavaScript
// ========================================
|
|
// 群組人員管理 - Vue.js 應用
|
|
// 檔案位置:Scripts/RoleManage.js
|
|
// ========================================
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
// 等待 DOM 載入完成
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', initRoleManageApp);
|
|
} else {
|
|
initRoleManageApp();
|
|
}
|
|
|
|
function initRoleManageApp() {
|
|
new Vue({
|
|
el: '#roleManageApp',
|
|
data: {
|
|
groupList: [
|
|
{ id: 'SG01', name: '系統管理群組', description: '擁有系統最高權限,可管理所有功能' },
|
|
{ id: 'SG02', name: '客戶管理群組', description: '可管理活動及參加人員' },
|
|
{ id: 'SG03', name: '現場工作群組', description: '可進行現場報到作業' },
|
|
{ id: 'SG04', name: '查詢群組', description: '僅可查詢報到資料' }
|
|
],
|
|
selectedGroup: null,
|
|
groupMembers: [],
|
|
searchKeyword: '',
|
|
searchResults: [],
|
|
selectedMembers: [],
|
|
selectedEmployees: [],
|
|
loadingMembers: false,
|
|
loadingSearch: false
|
|
},
|
|
mounted: function() {
|
|
console.log('[RoleManage.js] Vue instance mounted');
|
|
if (this.groupList.length > 0) {
|
|
this.selectGroup(this.groupList[0]);
|
|
}
|
|
},
|
|
methods: {
|
|
selectGroup: async function(group) {
|
|
this.selectedGroup = group;
|
|
this.selectedMembers = [];
|
|
await this.loadGroupMembers();
|
|
},
|
|
|
|
loadGroupMembers: async function() {
|
|
if (!this.selectedGroup) return;
|
|
|
|
this.loadingMembers = true;
|
|
try {
|
|
var response = await this.$api.call('RoleManageService', 'GetGroupMembers', {
|
|
groupID: this.selectedGroup.id
|
|
});
|
|
|
|
if (response.Success) {
|
|
this.groupMembers = response.Data || [];
|
|
console.log('[RoleManage] 載入群組成員: ' + this.groupMembers.length + ' 位');
|
|
} else {
|
|
this.$message.error(response.Message);
|
|
this.groupMembers = [];
|
|
}
|
|
} catch (error) {
|
|
console.error('[RoleManage] 載入群組成員失敗:', error);
|
|
this.$message.error('載入群組成員失敗');
|
|
this.groupMembers = [];
|
|
} finally {
|
|
this.loadingMembers = false;
|
|
}
|
|
},
|
|
|
|
searchEmployees: async function() {
|
|
if (!this.searchKeyword.trim()) {
|
|
this.$message.warning('請輸入搜尋關鍵字');
|
|
return;
|
|
}
|
|
|
|
this.loadingSearch = true;
|
|
this.selectedEmployees = [];
|
|
try {
|
|
var response = await this.$api.call('RoleManageService', 'SearchEmployees', {
|
|
keyword: this.searchKeyword
|
|
});
|
|
|
|
if (response.Success) {
|
|
this.searchResults = response.Data || [];
|
|
console.log('[RoleManage] 搜尋結果: ' + this.searchResults.length + ' 位');
|
|
} else {
|
|
this.$message.error(response.Message);
|
|
this.searchResults = [];
|
|
}
|
|
} catch (error) {
|
|
console.error('[RoleManage] 搜尋員工失敗:', error);
|
|
this.$message.error('搜尋員工失敗');
|
|
this.searchResults = [];
|
|
} finally {
|
|
this.loadingSearch = false;
|
|
}
|
|
},
|
|
|
|
addEmployeesToGroup: async function() {
|
|
if (!this.selectedGroup) {
|
|
this.$message.warning('請先選擇群組');
|
|
return;
|
|
}
|
|
|
|
if (this.selectedEmployees.length === 0) {
|
|
this.$message.warning('請選擇要加入的員工');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
var response = await this.$api.call('RoleManageService', 'AddMemberToGroup', {
|
|
groupID: this.selectedGroup.id,
|
|
employeeIDs: this.selectedEmployees
|
|
});
|
|
|
|
if (response.Success) {
|
|
this.$message.success(response.Message);
|
|
this.selectedEmployees = [];
|
|
await this.loadGroupMembers();
|
|
await this.searchEmployees();
|
|
} else {
|
|
this.$message.error(response.Message);
|
|
}
|
|
} catch (error) {
|
|
console.error('[RoleManage] 加入群組失敗:', error);
|
|
this.$message.error('加入群組失敗');
|
|
}
|
|
},
|
|
|
|
removeMembersFromGroup: async function() {
|
|
if (!this.selectedGroup) {
|
|
this.$message.warning('請先選擇群組');
|
|
return;
|
|
}
|
|
|
|
if (this.selectedMembers.length === 0) {
|
|
this.$message.warning('請選擇要移除的成員');
|
|
return;
|
|
}
|
|
|
|
if (!confirm('確定要從「' + this.selectedGroup.name + '」移除 ' + this.selectedMembers.length + ' 位成員嗎?')) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
var response = await this.$api.call('RoleManageService', 'RemoveMemberFromGroup', {
|
|
groupID: this.selectedGroup.id,
|
|
employeeIDs: this.selectedMembers
|
|
});
|
|
|
|
if (response.Success) {
|
|
this.$message.success(response.Message);
|
|
this.selectedMembers = [];
|
|
await this.loadGroupMembers();
|
|
} else {
|
|
this.$message.error(response.Message);
|
|
}
|
|
} catch (error) {
|
|
console.error('[RoleManage] 移除群組失敗:', error);
|
|
this.$message.error('移除群組失敗');
|
|
}
|
|
},
|
|
|
|
toggleMemberSelection: function(employeeId) {
|
|
var index = this.selectedMembers.indexOf(employeeId);
|
|
if (index > -1) {
|
|
this.selectedMembers.splice(index, 1);
|
|
} else {
|
|
this.selectedMembers.push(employeeId);
|
|
}
|
|
},
|
|
|
|
toggleEmployeeSelection: function(employeeId) {
|
|
var index = this.selectedEmployees.indexOf(employeeId);
|
|
if (index > -1) {
|
|
this.selectedEmployees.splice(index, 1);
|
|
} else {
|
|
this.selectedEmployees.push(employeeId);
|
|
}
|
|
},
|
|
|
|
isSelectedMember: function(employeeId) {
|
|
return this.selectedMembers.indexOf(employeeId) > -1;
|
|
},
|
|
|
|
isSelectedEmployee: function(employeeId) {
|
|
return this.selectedEmployees.indexOf(employeeId) > -1;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
})();
|