<!--
@ 作者: 秦东
@ 时间: 2024-09-12 14:41:53
@ 备注: 获取行政组织数据
-->
<script lang='ts' setup>
import { getgovcont } from '@/api/hr/org/index'
import { orgInfo } from "@/api/hr/org/type";
import { getOrgTreeList } from "@/api/hr/org/index";
const props = defineProps({
	orgid:{
		type: String,
		default:""
	}
})
const orgName = ref("")

/* const orgName = computed(()=>{
	return str.value
}) */

//let str = ref("")

//选择行政组织
const pickOrgVal = (val:any) => {

	if(val != "" && val != null){
		if(hasComma(val)){
			
			
			
			const interval = setInterval(() => {
				// 检查ref对象的值是否为false
				if (!orgTreeLoading.value) {
					
					clearInterval(interval);
					let str= ''
					str = replaceOrgIdWithName(val,orgTreeList.value)
					orgName.value =  str
				
				}
			}, 200); 


			
			
		}else{
			getgovcont({id:val*1,idstr:val})
			.then(({data}) =>{
				// console.log("选择行政组织-3->",data,data.name)
				orgName.value =  data.name
			})
			.finally(()=>{})
		}
		
		
		
	}
}

function removeLastChar(str: string | any[]) {
    // 检查输入是否为字符串
    if (typeof str !== 'string') {
        throw new Error('输入必须是字符串类型');
    }
    
    // 处理空字符串情况
    if (str.length === 0) {
        return str; // 空字符串返回自身
    }
    
    // 截取从开始到倒数第二个字符的部分
    return str.slice(0, -1);
}


function hasComma(str: any) {
    // 检查输入是否为字符串类型
    if (typeof str !== 'string') {
        return false
    }
    
    // 使用indexOf检查是否包含逗号
    // 如果存在逗号，返回true；否则返回false
    return str.indexOf(',') !== -1;
}



function commaStringToNumberArray(str: string) {
    // 检查输入是否为字符串
    if (typeof str !== 'string') {
        throw new Error('输入必须是字符串');
    }
    
    // 处理空字符串的情况
    if (str.trim() === '') {
        return [];
    }
    
    // 按逗号分割字符串，处理可能的空格，并转换为数字
    return str.split(',').map(item => {
        // 去除前后空格
        const trimmed = item.trim();
        // 转换为数字
        const number = Number(trimmed);
        
        // 检查是否为有效数字
        if (isNaN(number)) {
            throw new Error(`无法将 "${trimmed}" 转换为有效数字`);
        }
        
        return number;
    });
}

const orgTreeLoading = ref(true); //加载行政组织树
onBeforeMount(() => {
	//pickOrgVal(props.orgid)
	getOrgTreeList({ orgid: 309 })
    .then(({ data }) => {
    	// console.log("行政组织树对照值", data);

        orgTreeList.value = data;
    })
    .finally(() => {
      orgTreeLoading.value = false;
    });

})


/**
 * 2. 核心方法：输入ID逗号字符串，返回名称逗号字符串
 * @param {string} idStr - 逗号分隔的ID字符串（如 "102,103"）
 * @returns {string} 逗号分隔的名称字符串（如 "企管部,IT"）
 */
function replaceOrgIdWithName(idStr: string,orgTreeData: any) {
  // 边界处理：输入为空或非字符串时返回空
  if (!idStr || typeof idStr !== "string") {
    return "";
  }

  // 步骤1：构建ID→名称的映射表（高效查找）
  const idToNameMap = {};
  // 递归遍历所有树形节点，收集ID和名称
  function traverseNodes(nodes: any[]) {
    // 防止节点为空（如child: null）
    if (!nodes || !nodes.length) return;
    
    nodes.forEach((node: { id: string | number; name: any; child: any; }) => {
      // 存储当前节点的ID和名称（ID用数字作为key，匹配原始数据类型）
      idToNameMap[node.id] = node.name;
      // 递归遍历子节点（处理多层级结构）
      traverseNodes(node.child);
    });
  }
  // 初始化遍历（从根节点开始）
  traverseNodes(orgTreeData);

  // 步骤2：解析输入ID，替换为名称
  const result = idStr
    .split(",") // 分割为ID数组（如 "102,103" → ["102", "103"]）
    .map(idItem => {
      const pureId = idItem.trim(); // 去除空格（兼容 "102, 103" 这类输入）
      const idNum = Number(pureId); // 转为数字（匹配原始数据的ID类型）
      // 找到名称则返回名称，未找到则保留原始ID（避免丢失无效ID）
      return idToNameMap[idNum] || pureId;
    })
    .join(","); // 重新拼接为字符串

  return result;
}



const orgTreeList = ref<orgInfo[]>();
 //加载行政组织树
const orgTreeProps = {
  children: "child",
  label: "name",
}; //行政组织树对照值
onMounted(() => {
	pickOrgVal(props.orgid)

	

});
watch(() =>props.orgid,(val:string) => {
	// console.log("选择行政组织-4->",val)
	pickOrgVal(val)
})
</script>
<template>
	<div>{{ orgName }}</div>
</template>
<style  lang='scss' scoped>

</style>
