Files
hr-position-system/js/data/hierarchy.js
DonaldFang 方士碩 a6af297623 backup: 完成 HR_position_ 表格前綴重命名與欄位對照表整理
變更內容:
- 所有資料表加上 HR_position_ 前綴
- 整理完整欄位顯示名稱與 ID 對照表
- 模組化 JS 檔案 (admin.js, ai.js, csv.js 等)
- 專案結構優化 (docs/, scripts/, tests/ 等)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 12:05:20 +08:00

239 lines
13 KiB
JavaScript

/**
* 組織階層靜態資料模組
* 從 Excel 提取的下拉選單資料
*/
// ==================== 下拉選單資料 ====================
// 事業體
export const businessUnits = [
'半導體事業群', '汽車事業體', '法務室', '岡山製造事業體', '產品事業體',
'晶圓三廠', '集團人資行政事業體', '集團財務事業體', '集團會計事業體',
'集團資訊事業體', '新創事業體', '稽核室', '總經理室', '總品質事業體', '營業事業體'
];
// 處級單位
export const deptLevel1Units = [
'半導體事業群', '汽車事業體', '法務室', '生產處', '岡山製造事業體',
'封裝工程處', '副總辦公室', '測試工程與研發處', '資材處', '廠務與環安衛管理處',
'產品事業體', '先進產品事業處', '成熟產品事業處', '晶圓三廠', '製程工程處',
'集團人資行政事業體', '集團財務事業體', '岡山強茂財務處', '集團會計事業體',
'岡山會計處', '集團會計處', '集團資訊事業體', '資安行動小組', '資訊一處',
'資訊二處', '新創事業體', '中低壓產品研發處', '研發中心', '高壓產品研發處',
'稽核室', '總經理室', 'ESG專案辦公室', '專案管理室', '總品質事業體',
'營業事業體', '商業開發暨市場應用處', '海外銷售事業處', '全球技術服務處',
'全球行銷暨業務支援處', '大中華區銷售事業處'
];
// 部級單位
export const deptLevel2Units = [
'生產部', '生產企劃部', '岡山品質管制部', '製程工程一部', '製程工程二部',
'設備一部', '設備二部', '工業工程部', '測試工程部', '新產品導入部',
'研發部', '採購部', '外部資源部', '生管部', '原物料控制部', '廠務部',
'產品管理部(APD)', '產品管理部(MPD)', '品質部', '製造部', '廠務部(Fab3)',
'工程一部', '工程二部', '工程三部', '製程整合部(Fab3)', '行政總務管理部',
'招募任用部', '訓練發展部', '薪酬管理部', '岡山強茂財務部', '會計部',
'管理會計部', '集團合併報表部', '應用系統部', '電腦整合製造部', '系統網路服務部',
'資源管理部', '客戶品質管理部', '產品品質管理部', '品質系統及客戶工程整合部',
'封測外包品質管理部', '品質保證部', '日本區暨代工業務部', '歐亞區業務部',
'韓國區業務部-韓國區', '美洲區業務部', '應用工程部(GTS)', '系統工程部',
'特性測試部', '業務生管部', '市場行銷企劃部', 'MOSFET晶圓採購部',
'台灣區業務部', '業務一部', '業務二部'
];
// 崗位名稱
export const positionNames = [
'營運長', '營運長助理', '副總經理', '專案經理', '經副理', '法務專員',
'專利工程師', '處長', '專員', '課長', '組長', '班長', '副班長', '作業員',
'工程師', '副總經理助理', '副理', '專案經副理', '顧問', '人資長', '助理',
'財務長', '專案副理', '會計長', '資訊長', '主任', '總裁', '總經理',
'專員/工程師', '經理', '技術經副理', '處長/資深經理'
];
// ==================== 組織階層級聯映射 ====================
// 事業體 -> 處級單位 (預設資料,可被 API 覆蓋)
export let businessToDivision = {
'半導體事業群': ['半導體事業群'],
'汽車事業體': ['汽車事業體'],
'法務室': ['法務室'],
'岡山製造事業體': ['生產處', '岡山製造事業體', '封裝工程處', '副總辦公室', '測試工程與研發處', '資材處', '廠務與環安衛管理處'],
'產品事業體': ['產品事業體', '先進產品事業處', '成熟產品事業處'],
'晶圓三廠': ['晶圓三廠', '製程工程處'],
'集團人資行政事業體': ['集團人資行政事業體'],
'集團財務事業體': ['集團財務事業體', '岡山強茂財務處'],
'集團會計事業體': ['集團會計事業體', '岡山會計處', '集團會計處'],
'集團資訊事業體': ['集團資訊事業體', '資安行動小組', '資訊一處', '資訊二處'],
'新創事業體': ['新創事業體', '中低壓產品研發處', '研發中心', '高壓產品研發處'],
'稽核室': ['稽核室'],
'總經理室': ['總經理室', 'ESG專案辦公室', '專案管理室'],
'總品質事業體': ['總品質事業體'],
'營業事業體': ['營業事業體', '商業開發暨市場應用處', '海外銷售事業處', '全球技術服務處', '全球行銷暨業務支援處', '大中華區銷售事業處']
};
// 處級單位 -> 部級單位 (預設資料,可被 API 覆蓋)
export let divisionToDepartment = {
'半導體事業群': ['(直屬)'],
'汽車事業體': ['(直屬)'],
'法務室': ['(直屬)'],
'生產處': ['(直屬)', '生產部', '生產企劃部'],
'岡山製造事業體': ['岡山品質管制部'],
'封裝工程處': ['(直屬)', '製程工程一部', '製程工程二部', '設備一部', '設備二部'],
'副總辦公室': ['工業工程部'],
'測試工程與研發處': ['(直屬)', '測試工程部', '新產品導入部', '研發部'],
'資材處': ['(直屬)', '採購部', '外部資源部', '生管部', '原物料控制部'],
'廠務與環安衛管理處': ['(直屬)', '廠務部'],
'產品事業體': ['廠務部'],
'先進產品事業處': ['(直屬)', '產品管理部(APD)'],
'成熟產品事業處': ['(直屬)', '產品管理部(MPD)'],
'晶圓三廠': ['產品管理部(MPD)', '品質部', '製造部', '廠務部(Fab3)'],
'製程工程處': ['工程一部', '工程二部', '工程三部', '製程整合部(Fab3)'],
'集團人資行政事業體': ['製程整合部(Fab3)', '行政總務管理部', '招募任用部', '訓練發展部', '薪酬管理部'],
'集團財務事業體': ['薪酬管理部', '岡山強茂財務部'],
'岡山強茂財務處': ['(直屬)', '岡山強茂財務部'],
'集團會計事業體': ['岡山強茂財務部'],
'岡山會計處': ['(直屬)', '會計部', '管理會計部'],
'集團會計處': ['(直屬)', '集團合併報表部'],
'集團資訊事業體': ['集團合併報表部'],
'資安行動小組': ['集團合併報表部'],
'資訊一處': ['應用系統部', '電腦整合製造部', '系統網路服務部'],
'資訊二處': ['(直屬)'],
'新創事業體': ['(直屬)', '資源管理部'],
'中低壓產品研發處': ['(直屬)'],
'研發中心': ['(直屬)'],
'高壓產品研發處': ['(直屬)'],
'稽核室': ['(直屬)'],
'總經理室': ['(直屬)'],
'ESG專案辦公室': ['(直屬)'],
'專案管理室': ['(直屬)'],
'總品質事業體': ['(直屬)', '客戶品質管理部', '產品品質管理部', '品質系統及客戶工程整合部', '封測外包品質管理部', '品質保證部'],
'營業事業體': ['品質保證部'],
'商業開發暨市場應用處': ['(直屬)'],
'海外銷售事業處': ['(直屬)', '日本區暨代工業務部', '歐亞區業務部', '韓國區業務部-韓國區', '美洲區業務部'],
'全球技術服務處': ['(直屬)', '應用工程部(GTS)', '系統工程部', '特性測試部'],
'全球行銷暨業務支援處': ['(直屬)', '業務生管部', '市場行銷企劃部', 'MOSFET晶圓採購部'],
'大中華區銷售事業處': ['(直屬)', '台灣區業務部', '業務一部', '業務二部']
};
// 部級單位 -> 崗位名稱 (預設資料,可被 API 覆蓋)
export let departmentToPosition = {
'(直屬)': ['營運長', '營運長助理', '副總經理', '專案經理', '經副理', '法務專員', '專利工程師', '處長', '專員', '工程師', '課長', '專員/工程師', '主任', '總裁', '總經理', '經理', '助理'],
'生產部': ['經副理', '課長', '組長', '班長', '副班長', '作業員'],
'生產企劃部': ['經副理', '課長', '專員', '工程師'],
'岡山品質管制部': ['經副理', '課長', '工程師', '組長', '班長', '副班長', '作業員', '副總經理', '副總經理助理'],
'製程工程一部': ['經副理'],
'製程工程二部': ['經副理', '課長', '工程師'],
'設備一部': ['經副理'],
'設備二部': ['經副理', '課長', '工程師'],
'工業工程部': ['經副理', '工程師', '課長', '副理'],
'測試工程部': ['經副理', '課長', '工程師'],
'新產品導入部': ['經副理', '專員', '工程師'],
'研發部': ['經副理', '課長', '工程師', '專員'],
'採購部': ['經副理', '課長', '專員'],
'外部資源部': ['專員'],
'生管部': ['經副理', '課長', '專員', '班長', '副班長', '作業員'],
'原物料控制部': ['經副理', '課長', '專員', '班長', '副班長', '作業員'],
'廠務部': ['經副理', '課長', '工程師', '專員', '處長'],
'產品管理部(APD)': ['經副理', '工程師'],
'產品管理部(MPD)': ['經副理', '專案經副理', '工程師', '顧問', '專員'],
'品質部': ['經副理', '工程師', '作業員'],
'製造部': ['經副理', '課長', '班長', '副班長', '作業員'],
'廠務部(Fab3)': ['經副理', '工程師'],
'工程一部': ['經副理', '工程師'],
'工程二部': ['經副理', '工程師'],
'工程三部': ['經副理', '工程師'],
'製程整合部(Fab3)': ['經副理', '工程師', '人資長'],
'行政總務管理部': ['經副理', '專員', '助理'],
'招募任用部': ['經副理', '專員'],
'訓練發展部': ['經副理', '專員'],
'薪酬管理部': ['經副理', '專員', '財務長'],
'岡山強茂財務部': ['經副理', '課長', '專員', '專案副理', '會計長'],
'會計部': ['經副理', '課長', '專員'],
'管理會計部': ['經副理', '課長', '專員'],
'集團合併報表部': ['經副理', '專員', '資訊長', '課長'],
'應用系統部': ['經副理', '工程師'],
'電腦整合製造部': ['經副理', '工程師'],
'系統網路服務部': ['經副理', '工程師'],
'資源管理部': ['經副理', '專員'],
'客戶品質管理部': ['經副理', '課長', '工程師', '專員'],
'產品品質管理部': ['經副理', '課長', '工程師', '班長', '作業員'],
'品質系統及客戶工程整合部': ['經副理', '課長', '工程師'],
'封測外包品質管理部': ['經副理', '課長', '工程師'],
'品質保證部': ['經副理', '課長', '工程師', '班長', '副班長', '作業員', '副總經理', '副總經理助理'],
'日本區暨代工業務部': ['經副理', '課長', '專員', '助理'],
'歐亞區業務部': ['經副理', '課長', '專員', '助理'],
'韓國區業務部-韓國區': ['經副理', '課長', '專員', '助理', '專案經理'],
'美洲區業務部': ['經副理', '課長', '專員', '助理'],
'應用工程部(GTS)': ['經副理', '專案經副理', '技術經副理', '工程師'],
'系統工程部': ['經副理', '工程師'],
'特性測試部': ['經副理', '課長', '工程師'],
'業務生管部': ['經副理', '課長', '專員'],
'市場行銷企劃部': ['處長', '經理', '專員'],
'MOSFET晶圓採購部': ['經副理', '課長', '專員'],
'台灣區業務部': ['專員', '助理'],
'業務一部': ['處長/資深經理', '經副理', '專員', '助理'],
'業務二部': ['處長/資深經理', '經副理', '專員', '助理']
};
// ==================== API 資料載入函數 ====================
/**
* 從 API 載入組織階層資料,覆蓋預設資料
* @returns {Promise<boolean>} 是否載入成功
*/
export async function loadHierarchyData() {
try {
const response = await fetch('/api/hierarchy/cascade');
if (response.ok) {
const result = await response.json();
if (result.success && result.data) {
// 更新級聯映射資料
if (result.data.businessToDivision) {
Object.assign(businessToDivision, result.data.businessToDivision);
}
if (result.data.divisionToDepartment) {
Object.assign(divisionToDepartment, result.data.divisionToDepartment);
}
if (result.data.departmentToPosition) {
Object.assign(departmentToPosition, result.data.departmentToPosition);
}
console.log('[Hierarchy] 組織階層資料載入成功');
return true;
}
}
return false;
} catch (error) {
console.warn('[Hierarchy] 無法從 API 載入組織階層資料,使用預設資料:', error.message);
return false;
}
}
// ==================== 工具函數 ====================
/**
* 取得指定事業體的處級單位列表
* @param {string} businessUnit - 事業體名稱
* @returns {string[]} 處級單位列表
*/
export function getDivisions(businessUnit) {
return businessToDivision[businessUnit] || [];
}
/**
* 取得指定處級單位的部級單位列表
* @param {string} division - 處級單位名稱
* @returns {string[]} 部級單位列表
*/
export function getDepartments(division) {
return divisionToDepartment[division] || [];
}
/**
* 取得指定部級單位的崗位名稱列表
* @param {string} department - 部級單位名稱
* @returns {string[]} 崗位名稱列表
*/
export function getPositions(department) {
return departmentToPosition[department] || [];
}