<template>
  <div>
    <el-table ref="medicineRef" height="300" :data="filteredList" @cell-click="clickRow">
      <el-table-column label="项目名称" align="center" prop="name" width="300" />
      <el-table-column label="零售价" align="center" prop="retailPrice" />
      <el-table-column label="最高零售价" align="center" prop="maximumRetailPrice" />
    </el-table>
  </div>
</template>

<script setup>
import { getDiagnosisTreatmentList } from './diagnosistreatment';
import { ref, watch } from 'vue';

const props = defineProps({
  itemType: {
    type: String,
    default: '',
  },
  searchKey: {
    type: String,
    default: '',
  },
  shouldLoadData: {
    type: Boolean,
    default: false,
  },
  // 新增：从父组件接收预加载的数据
  preloadedData: {
    type: Array,
    default: () => [],
  },
});
const emit = defineEmits(['selectRow']);

const diagnosisTreatmentList = ref([]); // 原始数据列表
const filteredList = ref([]); // 过滤后的数据列表
const hasLoaded = ref(false); // 标记是否已加载数据

// 获取诊疗项目列表
function getList() {
  if (hasLoaded.value) return; // 如果已经加载过数据，则不再重复请求

  // 优先使用父组件传递的数据
  if (props.preloadedData && props.preloadedData.length > 0) {
    diagnosisTreatmentList.value = props.preloadedData;
    filterList(); // 初始化过滤
    hasLoaded.value = true;
    return;
  }

  // 如果父组件没有传递数据或数据为空，则自己请求
  getDiagnosisTreatmentList({ statusEnum: 2, pageSize: 1000, pageNo: 1 })
    .then((res) => {
      diagnosisTreatmentList.value =
        res.data?.records?.filter((item) => item.childrenJson == null) || [];
      filterList(); // 初始化过滤
      hasLoaded.value = true; // 标记为已加载
    })
    .catch((err) => {
      console.error('获取诊疗项目数据失败:', err);
    });
}

// 监听shouldLoadData属性变化，仅在首次为true时加载数据
watch(
  () => props.shouldLoadData,
  (newValue) => {
    if (newValue && !hasLoaded.value) {
      getList();
    }
  },
  { immediate: true }
);

// 监听preloadedData变化，当父组件数据更新时同步更新列表
watch(
  () => props.preloadedData,
  (newData) => {
    if (newData && newData.length > 0) {
      diagnosisTreatmentList.value = newData;
      filterList(); // 更新过滤
      hasLoaded.value = true;
    }
  },
  { immediate: true }
);

// 监听搜索关键词变化，实时过滤数据
watch(
  () => props.searchKey,
  () => {
    filterList();
  }
);

// 根据搜索关键词过滤列表
function filterList() {
  if (!props.searchKey || props.searchKey.trim() === '') {
    filteredList.value = diagnosisTreatmentList.value;
  } else {
    const searchTerm = props.searchKey.toLowerCase().trim();
    filteredList.value = diagnosisTreatmentList.value.filter(
      (item) => item.name && item.name.toLowerCase().includes(searchTerm)
    );
  }
}

function clickRow(row) {
  emit('selectRow', row);
}
</script>

<style scoped></style>
