Files
thinkyu/報到系統/Scripts/RoleManage.js
T
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

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;
}
}
});
}
})();