<template>
  <div class="app-container">
    <el-dialog
      v-model="visible"
      title="入库单据"
      width="1500"
      append-to-body
    >
      <el-row
        :gutter="10"
        class="mb8"
      >
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            icon="Plus"
            @click="submitAudit"
          >
            提交审核
          </el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            icon="Printer"
            :disabled="multiple"
            @click="handleDelete"
          >
            打印
          </el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            icon="EditPen"
            @click="handleTotalAmount"
          >
            计算金额
          </el-button>
        </el-col>
      </el-row>

      <el-form
        ref="receiptHeaderRef"
        :model="receiptHeaderForm"
        :inline="true"
        label-width="100px"
        :rules="rules"
      >
        <el-form-item
          label="单据号"
          prop="busNo"
        >
          <el-input
            v-model="receiptHeaderForm.busNo"
            placeholder="单据号："
            clearable
            style="width: 260px"
            :disabled="data.isEdit"
          />
        </el-form-item>
        <el-form-item
          label="经手人："
          prop="practitionerId"
          label-width="120px"
        >
          <el-select
            v-model="receiptHeaderForm.practitionerId"
            placeholder=""
            clearable
            style="width: 150px"
            :disabled="data.isEdit"
          >
            <el-option
              v-for="practitioner in practitionerListOptions"
              :key="practitioner.value"
              :label="practitioner.label"
              :value="practitioner.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="制单日期：">
          <el-date-picker
            v-model="receiptHeaderForm.occurrenceTime"
            value-format="YYYY-MM-DD HH:mm:ss"
            type="datetime"
            :disabled="data.isEdit"
          />
        </el-form-item>
        <el-form-item
          label="供应商："
          prop="supplierId"
        >
          <el-select
            v-model="receiptHeaderForm.supplierId"
            placeholder=""
            clearable
            style="width: 150px"
            :disabled="data.isEdit"
          >
            <el-option
              v-for="supplier in supplierListOptions"
              :key="supplier.value"
              :label="supplier.label"
              :value="supplier.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item
          label="药品类型："
          prop="medicationType"
        >
          <el-select
            v-model="receiptHeaderForm.medicationType"
            placeholder=""
            clearable
            style="width: 150px"
            :disabled="data.isEdit"
            @change="
              (value) => {
                itemType = value;
              }
            "
          >
            <el-option
              v-for="itemType in purchase_type"
              :key="itemType.value"
              :label="itemType.label"
              :value="itemType.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item
          label="仓库类型："
          prop="purposeTypeEnum"
        >
          <el-select
            v-model="receiptHeaderForm.purposeTypeEnum"
            placeholder=""
            clearable
            style="width: 150px"
            :disabled="data.isEdit"
            @change="handleChangeLocationType"
          >
            <el-option
              v-for="dict in warehous_type"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            />
          </el-select>
        </el-form-item>
      </el-form>
      <el-tabs type="border-card">
        <el-tab-pane label="入库单明细">
          <el-row
            :gutter="10"
            class="mb8"
          >
            <el-col :span="1.5">
              <el-button
                type="primary"
                plain
                icon="Plus"
                @click="addNewRow"
              >
                添加行
              </el-button>
            </el-col>
            <el-col :span="1.5">
              <el-button
                type="danger"
                plain
                icon="Delete"
                :disabled="multiple"
                @click="deleteSelectedRows"
              >
                删除行
              </el-button>
            </el-col>
          </el-row>
          <el-form
            ref="formRef"
            :model="form"
            :rules="tableRules"
          >
            <el-table
              ref="tableRef"
              v-loading="loading"
              :data="form.purchaseinventoryList"
              @selection-change="handleSelectionChange"
              @row-click="handleRowClick"
            >
              <el-table-column
                type="selection"
                width="50"
                align="center"
              />
              <el-table-column
                key="name"
                label="项目"
                align="center"
                prop="name"
                width="200"
                fixed
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.name`"
                    :rules="tableRules.name"
                  >
                    <PopoverList
                      :width="1000"
                      :model-value="scope.row.name"
                      @search="handleSearch"
                    >
                      <template #popover-content="{}">
                        <MedicineList
                          :search-key="medicineSearchKey"
                          :item-type="itemType"
                          @select-row="(row) => selectRow(row, scope.$index)"
                        />
                      </template>
                    </PopoverList>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="statusEnum_enumText"
                label="规格"
                align="center"
                prop="statusEnum_enumText"
                width="150"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.volume`"
                    :rules="tableRules.volume"
                  >
                    <el-input
                      v-model="scope.row.volume"
                      placeholder=""
                      disabled
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="manufacturerText"
                label="厂家/产地"
                align="center"
                prop="manufacturerText"
                :show-overflow-tooltip="true"
                width="160"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.manufacturerText`"
                    :rules="tableRules.manufacturerText"
                  >
                    <el-input
                      v-model="scope.row.manufacturerText"
                      placeholder=""
                      disabled
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="purposeLocationId"
                label="仓库"
                align="center"
                prop="purposeLocationId"
                :show-overflow-tooltip="true"
                width="180"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.purposeLocationId`"
                    :rules="tableRules.purposeLocationId"
                  >
                    <div class="select_wrapper_div">
                      <el-select
                        v-model="scope.row.purposeLocationId"
                        placeholder="请选择仓库"
                        :class="{ 'error-border': scope.row.error }"
                        clearable
                      >
                        <el-option
                          v-for="(item, index) in scope.row.locationInventoryList"
                          :key="index"
                          :label="item.name"
                          :value="item.id"
                          @click="handleLocationClick(item, scope.row, scope.$index)"
                        />
                      </el-select>
                    </div>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="locationStoreName"
                label="货位"
                align="center"
                prop="locationStoreName"
                width="180"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.locationStoreName`"
                    :rules="tableRules.locationStoreName"
                  >
                    <div class="select_wrapper_div">
                      <el-select
                        v-model="scope.row.locationStoreName"
                        placeholder="请选择货位"
                        :class="{ 'error-border': scope.row.error }"
                        clearable
                      />
                    </div>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="quantity"
                label="总库存数量"
                align="center"
                prop="quantity"
                width="120"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.quantity`"
                    :rules="tableRules.quantity"
                  >
                    <el-input
                      v-model="scope.row.quantity"
                      placeholder=""
                      disabled
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="itemQuantity"
                label="采购数量"
                align="center"
                prop="itemQuantity"
                width="120"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.itemQuantity`"
                    :rules="tableRules.itemQuantity"
                  >
                    <div class="select_wrapper_div">
                      <el-input
                        v-model="scope.row.itemQuantity"
                        placeholder=""
                        :class="{ 'error-border': scope.row.error }"
                        @blur="handleTotalPrice(scope.$index)"
                      />
                    </div>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="unitCode"
                label="计量单位"
                align="center"
                prop="unitCode"
                :show-overflow-tooltip="true"
                width="90"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.unitCode`"
                    :rules="tableRules.unitCode"
                  >
                    <div class="select_wrapper_div">
                      <el-select
                        v-model="scope.row.unitCode"
                        placeholder=" "
                        :disabled="data.isEdit"
                        :class="{ 'error-border': scope.row.error }"
                        @change="(value) => handleUnitCodeChange(scope.row, scope.$index, value)"
                      >
                        <template v-if="!data.isEdit && scope.row.partPercent > 1">
                          <el-option
                            :label="scope.row.unitList.unitCode_dictText"
                            :value="scope.row.unitList.unitCode"
                          />
                          <el-option
                            :label="scope.row.unitList.minUnitCode_dictText"
                            :value="scope.row.unitList.minUnitCode"
                          />
                        </template>
                        <template v-if="!data.isEdit && scope.row.partPercent == 1">
                          <el-option
                            :label="scope.row.unitList.unitCode_dictText"
                            :value="scope.row.unitList.unitCode"
                          />
                        </template>
                        <template v-if="data.isEdit">
                          <el-option
                            :label="scope.row.unitCode_dictText"
                            :value="scope.row.unitCode"
                          />
                        </template>
                      </el-select>
                    </div>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="price"
                label="采购单价 "
                align="center"
                prop="price"
                width="130"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.price`"
                    :rules="tableRules.price"
                  >
                    <div class="select_wrapper_div">
                      <el-input
                        v-model="scope.row.price"
                        placeholder=""
                        :class="{ 'error-border': scope.row.error }"
                        @blur="handleTotalPrice(scope.$index)"
                      >
                        <template #suffix>
                          元
                        </template>
                      </el-input>
                    </div>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="totalPrice"
                label="合计金额 "
                align="center"
                prop="totalPrice"
                width="130"
              >
                <template #default="scope">
                  <el-form-item :prop="`purchaseinventoryList.${scope.$index}.totalPrice`">
                    <el-input
                      v-model="scope.row.totalPrice"
                      disabled
                      placeholder=""
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="lotNumber"
                label="产品批号"
                align="center"
                prop="lotNumber"
                width="160"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.lotNumber`"
                    :rules="tableRules.lotNumber"
                  >
                    <el-input
                      v-model="scope.row.lotNumber"
                      placeholder=""
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="startTime"
                label="生产日期"
                align="center"
                prop="startTime"
                width="150"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.startTime`"
                    :rules="tableRules.startTime"
                  >
                    <el-date-picker
                      v-model="scope.row.startTime"
                      type="date"
                      placeholder="选择日期"
                      format="YYYY-MM-DD"
                      value-format="YYYY-MM-DD"
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="endTime"
                label="有效期至"
                align="center"
                prop="endTime"
                width="150"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.endTime`"
                    :rules="tableRules.endTime"
                  >
                    <el-date-picker
                      v-model="scope.row.endTime"
                      type="date"
                      placeholder="选择日期"
                      format="YYYY-MM-DD"
                      value-format="YYYY-MM-DD"
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="invoiceNo"
                label="发票号 "
                align="center"
                prop="invoiceNo"
                width="130"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.invoiceNo`"
                    :rules="tableRules.invoiceNo"
                  >
                    <el-input
                      v-model="scope.row.invoiceNo"
                      placeholder=""
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="traceNo"
                label="药品追溯码"
                align="center"
                prop="traceNo"
                width="130"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.traceNo`"
                    :rules="tableRules.traceNo"
                  >
                    <el-input
                      v-model="scope.row.traceNo"
                      placeholder=""
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="approvalTime"
                label="追溯码包装"
                align="center"
                prop="approvalTime"
                width="130"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.zsbz`"
                    :rules="tableRules.zsbz"
                  >
                    <el-input
                      v-model="scope.row.zsbz"
                      placeholder=""
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                key="detailJson"
                label="备注"
                align="center"
                prop="detailJson"
                width="130"
              >
                <template #default="scope">
                  <el-form-item
                    :prop="`purchaseinventoryList.${scope.$index}.detailJson`"
                    :rules="tableRules.detailJson"
                  >
                    <el-input
                      v-model="scope.row.detailJson"
                      placeholder=""
                    />
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                label="操作"
                align="center"
                width="80"
                class-name="small-padding fixed-width"
                fixed="right"
              >
                <!-- v-hasPermi="['system:user:edit']" -->
                <template #default="scope">
                  <el-button
                    link
                    type="primary"
                    icon="Edit"
                    @click="handleSave(scope.row, scope.$index)"
                  >
                    保存
                  </el-button>
                </template>
              </el-table-column>
            </el-table>
          </el-form>
        </el-tab-pane>
      </el-tabs>
      <el-row
        :gutter="10"
        class="mb8"
        style="margin-top: 15px; display: flex; align-items: center; justify-content: flex-start"
      >
        <el-col :span="3">
          <span>制单人：{{ userStore.name }}</span>
        </el-col>
        <!-- <el-col :span="2">
          <span>审核人：</span>
        </el-col>
        <el-col :span="2">
          <span>单据状态：</span>
        </el-col> -->
        <el-col :span="6">
          <el-row
            :gutter="8"
            style="display: flex; align-items: center; justify-content: flex-start"
          >
            <el-col :span="10">
              <span>合计金额：{{ totalAmount }}</span>
            </el-col>
            <!-- <el-col :span="10">
              <el-input v-model="totalAmount" placeholder="" disabled />
            </el-col> -->
          </el-row>
        </el-col>
      </el-row>
    </el-dialog>
  </div>
</template>

<script setup name="InventoryReceiptDialog">
import {
  addPurchaseInventory,
  delPurchaseinventory,
  getCount,
  getDispensaryList,
  getMedicineList,
  getPharmacyList,
  submitApproval,
} from './purchaseinventory';
import PopoverList from '@/components/HealthLinkHis/popoverList/index.vue';
import MedicineList from './medicineList.vue';
import {formatDate} from '@/utils/index';
import useUserStore from '@/store/modules/user';

const router = useRouter();
const userStore = useUserStore();

const { proxy } = getCurrentInstance();
const { warehous_type, category_code, service_type_code, specialty_code, purchase_type } =
  proxy.useDict(
    'warehous_type',
    'category_code',
    'service_type_code',
    'specialty_code',
    'purchase_type'
  );

const purchaseinventoryList = ref([]);
const open = ref(false);
const loading = ref(false);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref('');
const visible = ref(false);
const row = ref({});
const rowIndex = ref(-1);
const totalAmount = ref(0);
const locationList = ref([]);
const props = defineProps({
  practitionerListOptions: {
    type: Object,
    required: false,
  },
  itemTypeOptions: {
    type: Object,
    required: false,
  },
  supplierListOptions: {
    type: Object,
    required: false,
  },
  busNoAdd: {
    type: String,
    required: true,
  },
  item: {
    type: Object,
    required: false,
  },
  editRow: {
    type: Object,
    required: false,
  },
});

const form = reactive({
  purchaseinventoryList: [],
});

const receiptHeaderForm = reactive({
  busNo: undefined,
  occurrenceTime: formatDate(new Date()),
});

const data = reactive({
  isEdit: false,
  isAdding: true,
  queryParams: {
    pageNo: 1,
    pageSize: 10,
    searchKey: undefined, // 供应商名称
    busNo: undefined, // 编码
    statusEnum: undefined, // 状态
    supplierId: undefined, // 供应商ID
    applyTimeStart: undefined, // 申请时间开始
    practitionerId: undefined, // 经手人ID
  },
  rules: {
    practitionerId: [{ required: true, message: '请选择经手人', trigger: 'change' }],
    supplierId: [{ required: true, message: '请选择供应商', trigger: 'change' }],
    purposeTypeEnum: [{ required: true, message: '请选择仓库类型', trigger: 'change' }],
    medicationType: [{ required: true, message: '请选择药品类型', trigger: 'change' }],
  },
  tableRules: {
    itemId: [{ required: true, message: '项目不能为空', trigger: 'blur' }],
    statusEnum_enumText: [{ required: true, message: '规格不能为空', trigger: 'blur' }],
    unitCode: [{ required: true, message: '计量单位不能为空', trigger: 'blur' }],
    purposeLocationId: [{ required: true, message: '目的仓库不能为空', trigger: 'blur' }],
    // purposeLocationStoreId: [
    //   { required: true, message: "货位不能为空", trigger: "blur" },
    // ],
    lotNumber: [{ required: true, message: '产品批号不能为空', trigger: 'blur' }],
    // traceNo: [{ required: true, message: "追溯码不能为空", trigger: "blur" }],
    startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
    endTime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
    price: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
    totalPrice: [{ required: true, message: '总价不能为空', trigger: 'blur' }],
  },
});

const { queryParams, rules, tableRules } = toRefs(data);
const itemTypeOptions = ref(undefined); // 入库项目类型
const practitionerListOptions = ref(undefined); // 查询经手人列表
const supplierListOptions = ref(undefined); // 供应商列表
const selectedRows = ref([]); // 用于存储选中的行
const emit = defineEmits(['refresh']);
const tableRef = ref(undefined); // 表格引用
const currentRow = ref(undefined); // 当前操作的行
const medicineSearchKey = ref('');
const itemType = ref('');
// 挂载时绑定事件
onMounted(() => {
  document.addEventListener('click', handleClickOutside);
});

// 卸载时移除事件
onUnmounted(() => {
  document.removeEventListener('click', handleClickOutside);
});

function addNewRow() {
  proxy.$refs['receiptHeaderRef'].validate((valid) => {
    if (valid) {
      if (data.isAdding) {
        proxy.$message.warning('请先保存当前行后再新增！');
        return;
      }
      const newRow = {
        id: '',
        itemTable: '',
        itemQuantity: '',
        itemId: '',
        unitCode: '',
        detailJson: '',
        supplierId: '',
        purposeTypeEnum: '',
        purposeLocationId: null,
        purposeLocationStoreId: null,
        practitionerId: '',
        traceNo: '',
        invoiceNo: '',
        startTime: '',
        endTime: '',
        price: '',
        totalPrice: '',
        sellPrice: '',
        minSellPrice: '',
        locationInventoryList: [], // 库房列表
        unitList: {}, // 单位列表
        isEditing: true, // 标记当前行是否正在编辑
        error: false, // 新增 error 字段
        isSave: false, // 当前行是否保存
      };
      form.purchaseinventoryList.push(newRow);
      data.isAdding = true; // 设置标志位为 true，表示有未保存的
    }
  });
}

function handleBlur(row, index) {
  let hasError = false;
  if (receiptHeaderForm.medicationType === '1') {
    row.itemTable = 'med_medication_definition';
  } else {
    row.itemTable = 'adm_device_definition';
  }
  row.practitionerId = receiptHeaderForm.practitionerId;
  row.busNo = receiptHeaderForm.busNo;
  row.occurrenceTime = receiptHeaderForm.occurrenceTime;
  row.supplierId = receiptHeaderForm.supplierId;
  row.purposeTypeEnum = receiptHeaderForm.purposeTypeEnum;
}

// 点击行时记录当前行
function handleRowClick(row) {
  getMedicineList({ itemId: row.itemId }).then((res) => {
    console.log(res.data);
  });
  currentRow.value = row;
}

// 监听表格外的点击事件
function handleClickOutside(event) {
  // if (tableRef.value && !tableRef.value.$el.contains(event.target)) {
  //   if (currentRow.value) {
  //     handleSave(currentRow.value);
  //     currentRow.value = null; // 清空当前行
  //   }
  // }
}

function saveRow(row, index) {
  form.purchaseinventoryList[index] = row;
  addPurchaseInventory(row).then((response) => {
    reset();
    data.isAdding = false; // 允许新增下一行
    proxy.$message.success('保存成功！');
    visible.value = false;
  });
}

// 药品列表搜索
function handleSearch(value) {
  medicineSearchKey.value = value;
}

// 选择药品
function selectRow(rowValue, index) {
  rowIndex.value = index;
  form.purchaseinventoryList[index].itemId = rowValue.definitionId;
  form.purchaseinventoryList[index].name = rowValue.name;
  form.purchaseinventoryList[index].volume = rowValue.volume;
  form.purchaseinventoryList[index].minUnitCode = rowValue.minUnitCode;
  form.purchaseinventoryList[index].unitCode = rowValue.unitCode;
  form.purchaseinventoryList[index].manufacturerText = rowValue.manufacturerText;
  form.purchaseinventoryList[index].partPercent = rowValue.partPercent;
  form.purchaseinventoryList[index].unitList = rowValue.unitList[0];
  form.purchaseinventoryList[index].locationInventoryList = locationList.value;
  console.log(form.purchaseinventoryList[index].unitList[0], 123);
}

// 选择仓库
function handleLocationClick(item, row, index) {
  getCount({
    itemId: row.itemId,
    locationId: item.id,
  }).then((res) => {
    if (res.data) {
      form.purchaseinventoryList[index].quantity = res.data[0].quantity || 0;
      form.purchaseinventoryList[index].price = res.data[0].price || 0;
    }
  });
  // form.purchaseinventoryList[index].purposeLocationStoreId =
  //   item.locationStoreId;
  // form.purchaseinventoryList[index].locationStoreName = item.locationStoreName;
  //
}
// 切换仓库类型获取药房/药库列表
function handleChangeLocationType(value) {
  if (value == 16) {
    getPharmacyList().then((res) => {
      locationList.value = res.data;
    });
  } else if (value == 11) {
    getDispensaryList().then((res) => {
      locationList.value = res.data;
    });
  }
}

// 单位处理
function handleUnitCodeChange(row, index, value) {
  if (row.minUnitCode != value) {
    // 总库存数
    form.purchaseinventoryList[index].quantity = row.quantity / row.partPercent;
    // 采购数量
    form.purchaseinventoryList[index].itemQuantity =
      form.purchaseinventoryList[index].itemQuantity / row.partPercent;
    // 采购单价
    form.purchaseinventoryList[index].price =
      form.purchaseinventoryList[index].price / row.partPercent;
  } else {
    form.purchaseinventoryList[index].quantity = row.quantity * row.partPercent;
    form.purchaseinventoryList[index].itemQuantity =
      form.purchaseinventoryList[index].itemQuantity * row.partPercent;
    form.purchaseinventoryList[index].price =
      form.purchaseinventoryList[index].price * row.partPercent;
  }
}

// 计算总价
function handleTotalPrice(index) {
  let purchaseItem = form.purchaseinventoryList[index];
  if (purchaseItem.price > 0 && purchaseItem.itemQuantity > 0) {
    form.purchaseinventoryList[index].totalPrice = purchaseItem.price * purchaseItem.itemQuantity;
  }
}

function handleSave(row, index) {
  handleBlur(row);
  proxy.$refs['receiptHeaderRef'].validate((valid) => {
    if (valid) {
      proxy.$refs['formRef'].validate((valid) => {
        if (valid) {
          addPurchaseInventory(row).then((res) => {
            // 当前行没有id视为首次新增
            if (!row.id) {
              data.isAdding = false; // 允许新增下一行
            }
            if (res.data) {
              proxy.$message.success('保存成功！');
              form.purchaseinventoryList[index].id = res.data;
              form.purchaseinventoryList[index].isSave = true;
            }
          });
        }
      });
    }
  });
  // 保存逻辑...
}

/** 选择条数  */
function handleSelectionChange(selection) {
  console.log(selection, 'selection');
  // selectedData.value = selection.map((item) => ({ ...item })); // 存储选择的行数据
  ids.value = selection.map((item) => item.id);
  selectedRows.value = selection;
  single.value = selection.length != 1;
  multiple.value = !selection.length;
}

function deleteSelectedRows() {
  let length = selectedRows.value.length;
  let ids = selectedRows.value.map((item) => {
    return item.id;
  });
  if (selectedRows.value[length - 1].isSave) {
    delPurchaseinventory(ids).then((res) => {
      if (res.code == 200) {
        proxy.$message.success('删除成功');
      }
    });
  } else {
    if (length > 1) {
      delPurchaseinventory(ids).then((res) => {
        if (res.code == 200) {
          proxy.$message.success('删除成功');
        }
      });
    }
  }
  form.purchaseinventoryList = form.purchaseinventoryList.filter(
    (row) => !selectedRows.value.includes(row)
  );
}

/**计算合计金额 */
function handleTotalAmount() {
  totalAmount.value = form.purchaseinventoryList.reduce((accumulator, currentRow) => {
    return accumulator + (currentRow.totalPrice || 0);
  }, 0);
}

/** 重置操作表单 */
function reset() {
  // form.value = {
  //   id: undefined,
  //   name: undefined,
  //   categoryCode: undefined,
  //   cwTypeCode: undefined,
  //   fwTypeCode: undefined,
  //   specialtyCode: undefined,
  //   locationId: undefined,
  //   offeredOrgId: undefined,
  //   activeFlag: undefined,
  //   extraDetails: undefined,
  //   contact: undefined,
  //   appointmentRequiredFlag: undefined,
  //   chargeName: undefined,
  //   price: undefined,
  //   description: undefined,
  //   ybType: undefined,
  //   title: undefined,
  //   comment: undefined,
  // };
  // proxy.resetForm("purchaseinventoryRef");

  // receiptHeaderForm = {
  //   busNo: undefined,
  //   practitionerId: undefined,
  //   occurrenceTime: undefined,
  //   supplierId: undefined,
  //   medicationType: "1",
  //   purposeTypeEnum: undefined,
  // };
  proxy.resetForm('receiptHeaderRef');
  form.purchaseinventoryList = [];
}
// 显示弹框
function show() {
  data.isEdit = false;
  data.isAdding = false;
  reset();
  visible.value = true;
  supplierListOptions.value = props.supplierListOptions;
  itemTypeOptions.value = props.itemTypeOptions;
  practitionerListOptions.value = props.practitionerListOptions;
  receiptHeaderForm.busNo = props.busNoAdd;
  // console.log(purchase_type.value, "purchase_type.value")
  // // 设置默认值为字典中的第一个值
  // if (purchase_type.value.length > 0) {
  //   form.value.medicationType = purchase_type.value[0].value;
  // }
}
// 显示弹框
function edit() {
  data.isAdding = false;
  data.isEdit = true;
  // reset();
  visible.value = true;
  supplierListOptions.value = props.supplierListOptions;
  itemTypeOptions.value = props.itemTypeOptions;
  practitionerListOptions.value = props.practitionerListOptions;
  // receiptHeaderForm.busNo = props.busNoAdd;
  // receiptHeaderForm = props.item.length > 0 ? props.item[0] : {};
  // receiptHeaderForm.busNo = props.item.supplyBusNo;
  receiptHeaderForm.busNo = props.editRow.supplyBusNo;
  receiptHeaderForm.supplierId = props.editRow.supplierId;
  receiptHeaderForm.practitionerId = props.editRow.practitionerId;
  receiptHeaderForm.occurrenceTime = formatDate(props.editRow.occurrenceTime);
  receiptHeaderForm.purposeTypeEnum = props.editRow.purposeTypeEnum.toString();
  receiptHeaderForm.medicationType =
    props.editRow.itemTable == 'med_medication_definition' ? '1' : '2';
  total.value = form.purchaseinventoryList.length;
  handleChangeLocationType(props.editRow.purposeTypeEnum.toString());
  setTimeout(() => {
    form.purchaseinventoryList = props.item.map((item) => {
      return {
        ...item,
        name: item.itemName,
        volume: item.totalVolume,
        manufacturerText: item.supplierName,
        quantity: item.totalQuantity,
        locationInventoryList: locationList.value,
        startTime: formatDate(item.startTime),
        endTime: formatDate(item.endTime),
        applyTime: formatDate(item.applyTime),
        isSave: true,
      };
    });
  }, 100);

  console.log(form.purchaseinventoryList, 'purchaseinventoryList.value');
  console.log(receiptHeaderForm, 'receiptHeaderForm');
  loading.value = false;
}
/** 取消按钮 */
function cancel() {
  open.value = false;
  reset();
}
/** 提交审核 */
function submitAudit() {
  let length = form.purchaseinventoryList.length;
  if (length < 1) {
    proxy.$modal.msgWarning('请先添加单据');
  } else if (!form.purchaseinventoryList[length - 1].isSave) {
    proxy.$modal.msgWarning('第' + length + '行单据未保存，请先保存');
  } else {
    submitApproval(receiptHeaderForm.busNo).then((res) => {
      if (res.code == 200) {
        proxy.$modal.msgSuccess('提交审批成功');
        emit('refresh');
        visible.value = false;
      } else {
        proxy.$modal.msgError(res.msg || '提交审批失败');
      }
    }).catch((error) => {
      console.error('提交审批失败:', error);
      proxy.$modal.msgError(error.message || '提交审批失败，请重试');
    });
  }
}
/** 修改按钮操作 */
function handleUpdate(row) {
  reset();
  form.value = JSON.parse(JSON.stringify(row));
  form.value.fwTypeCode = form.value.typeCode;
  open.value = true;
  title.value = '编辑';
}

/** 删除按钮操作 */
function handleDelete(row) {
  const delId = row.id || ids.value;
  data.isAdding = false;
  proxy.$modal
    .confirm('是否确认删除以上数据?')
    .then(function () {
      return delPurchaseinventory({ ids: delId.join(',') });
    })
    .then(() => {
      proxy.$modal.msgSuccess('删除成功');
    })
    .catch(() => {});
}

defineExpose({
  show,
  edit,
});
</script>
<style scoped>
.custom-tree-node {
  display: flex;
  align-items: center;
}

.title {
  font-weight: bold;
  font-size: large;
  margin-bottom: 10px;
}

.error-border {
  border: 1px solid red;
}
</style>