<template>
  <div style="width: 100%; padding: 0px 15px">
    <el-form
      :model="formData.data"
      :rules="rules"
      ref="formDom"
      label-position="top"
      :disabled="props.queryData.purchaseDetailList ? true : false"
    >
      <div class="_t">基础信息</div>
      <el-row :gutter="10">
        <el-col :span="6">
          <el-form-item label="采购部门" prop="deptName">
            <el-input v-model="formData.data.deptName" placeholder="请输入">
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="采购人" prop="purchaseName">
            <el-input v-model="formData.data.purchaseName" placeholder="请输入">
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="采购时间" prop="purchaseTime">
            <el-date-picker
              v-model="formData.data.purchaseTime"
              type="datetime"
              placeholder="请选择"
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="10">
        <el-col :span="6">
          <el-form-item label="供应商" prop="supplyId">
            <el-select
              v-model="formData.data.supplyId"
              placeholder="请选择"
              @change="handleChangeSupplier"
              filterable
              style="width: 100%"
            >
              <el-option
                v-for="item in supplierData"
                :label="item.name"
                :value="item.id"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="是否合同" prop="isAgreement">
            <el-select
              v-model="formData.data.isAgreement"
              placeholder="请选择"
              style="width: 100%"
            >
              <el-option label="是" value="1"> </el-option>
              <el-option label="否" value="0"> </el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="付款方式" prop="paymentMethod">
            <el-select
              v-model="formData.data.paymentMethod"
              placeholder="请选择"
              filterable
              style="width: 100%"
            >
              <el-option
                v-for="item in fundsPaymentMethod"
                :label="item.dictValue"
                :value="item.dictKey"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="合同编号" prop="contractCode">
            <el-input v-model="formData.data.contractCode" placeholder="请输入">
            </el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <el-form-item label="采购说明" prop="purchaseContent">
        <el-input
          v-model="formData.data.purchaseContent"
          placeholder="请输入"
          type="textarea"
        >
        </el-input>
      </el-form-item>
      <div class="_t">采购明细</div>
      <el-form-item>
        <el-button
          type="primary"
          @click="openProduct = true"
          style="margin: 10px 0"
          v-if="ids.length == 0"
        >
          添加物品
        </el-button>
        <el-table :data="formData.data.purchaseDetailList">
          <el-table-column
            prop="goodType"
            label="物品类型"
            :formatter="(row) => (row.goodType == 1 ? '产品' : '物料')"
          />
          <el-table-column prop="productCode" label="物品编码" />
          <el-table-column prop="productName" label="物品名称" />
          <!-- <el-table-column prop="productSpec" label="规格型号" /> -->
          <el-table-column
            prop="productUnit"
            label="单位"
            :formatter="(row) => dictValueLabel(row.productUnit, productUnit)"
          />
          <el-table-column
            prop="subscribeCount"
            label="申购数量"
            v-if="ids.length > 0"
          />
          <el-table-column
            prop="purchaseCount"
            label="已采购数量"
            v-if="ids.length > 0"
          />
          <el-table-column prop="count" label="本次采购" min-width="150">
            <template #default="{ row, $index }">
              <el-form-item
                :prop="'purchaseDetailList.' + $index + '.count'"
                :rules="rules.count"
                :inline-message="true"
              >
                <el-input-number
                  v-model="row.count"
                  :precision="4"
                  :controls="false"
                  :min="0"
                  @change="handleChangeAmount"
                />
              </el-form-item>
            </template>
          </el-table-column>
          <el-table-column prop="price" label="单价" min-width="150">
            <template #default="{ row, $index }">
              <el-form-item
                :prop="'purchaseDetailList.' + $index + '.price'"
                :rules="rules.price"
                :inline-message="true"
              >
                <el-input-number
                  v-model="row.price"
                  :precision="4"
                  :controls="false"
                  :min="0"
                  @change="handleChangeAmount"
                />
              </el-form-item>
            </template>
          </el-table-column>
          <el-table-column prop="amount" label="金额" />
          <el-table-column prop="zip" label="操作" width="100">
            <template #default="{ $index }">
              <el-button type="primary" link @click="handleRemove($index, 20)"
                >删除</el-button
              >
            </template>
          </el-table-column>
        </el-table>
      </el-form-item>
      <div class="_t">其他费用</div>
      <el-form-item>
        <el-button type="primary" style="margin: 10px 0" @click="handleAdd">
          添加
        </el-button>
        <el-table :data="formData.data.otherFeeList">
          <el-table-column prop="name" label="费用名称" min-width="150">
            <template #default="{ row, $index }">
              <el-form-item
                :prop="'otherFeeList.' + $index + '.name'"
                :rules="rulesOne.name"
                :inline-message="true"
              >
                <el-input v-model="row.name" placeholder="请输入" />
              </el-form-item>
            </template>
          </el-table-column>
          <el-table-column prop="price" label="金额" min-width="150">
            <template #default="{ row, $index }">
              <el-form-item
                :prop="'otherFeeList.' + $index + '.price'"
                :rules="rulesOne.price"
                :inline-message="true"
              >
                <el-input-number
                  v-model="row.price"
                  :precision="4"
                  :controls="false"
                  :min="0"
                  @change="handleChangeAmount"
                />
              </el-form-item>
            </template>
          </el-table-column>

          <el-table-column prop="remark" label="备注" min-width="150">
            <template #default="{ row, $index }">
              <el-form-item
                :prop="'otherFeeList.' + $index + '.remark'"
                :inline-message="true"
              >
                <el-input v-model="row.remark" placeholder="请输入" />
              </el-form-item>
            </template>
          </el-table-column>
          <el-table-column prop="zip" label="操作" width="100">
            <template #default="{ $index }">
              <el-button type="primary" link @click="handleRemove($index, 10)"
                >删除</el-button
              >
            </template>
          </el-table-column>
        </el-table>
      </el-form-item>
      <div class="_t" style="margin-bottom: 15px">采购总金额</div>
      <el-row>
        <el-col :span="4">
          <el-form-item label="采购总金额" prop="amount">
            <el-input
              v-model="formData.data.amount"
              placeholder="请输入"
              disabled
            />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <el-dialog
      v-model="openProduct"
      title="选择物品"
      width="70%"
      append-to-body
    >
      <SelectGoods
        @cancel="openProduct = false"
        @pushGoods="pushGoods"
      ></SelectGoods>
    </el-dialog>
  </div>
</template>

<script setup>
import SelectGoods from "@/components/product/SelectGoods";
import { ElMessage, ElMessageBox } from "element-plus";
import useUserStore from "@/store/modules/user";
import { useRouter, useRoute } from "vue-router";
const { proxy } = getCurrentInstance();
const route = useRoute();
let formData = reactive({
  data: {
    purchaseTime: "",
    purchaseDetailList: [],
    otherFeeList: [],
  },
});
let rules = ref({
  deptName: [{ required: true, message: "请输入采购部门", trigger: "blur" }],
  purchaseName: [
    { required: true, message: "请输入采购人名称", trigger: "blur" },
  ],
  purchaseTime: [
    { required: true, message: "请选择采购时间", trigger: "change" },
  ],
  supplyId: [{ required: true, message: "请选择供应商", trigger: "change" }],
  count: [{ required: true, message: "请输入本次采购数量", trigger: "blur" }],
  price: [{ required: true, message: "请输入单价", trigger: "blur" }],
  remark: [{ required: true, message: "请输入备注", trigger: "blur" }],
  isAgreement: [
    { required: true, message: "请选择是否合同", trigger: "change" },
  ],
  paymentMethod: [
    { required: true, message: "请选择付款方式", trigger: "change" },
  ],
});
let rulesOne = ref({
  name: [{ required: true, message: "请输入费用名称", trigger: "blur" }],
  price: [{ required: true, message: "请输入金额", trigger: "blur" }],
});

let openProduct = ref(false);
const handleAdd = () => {
  formData.data.otherFeeList.push({
    name: "",
    price: 0,
    remark: "",
  });
};
// 物品相应逻辑
const handleRemove = (index, type) => {
  if (type == 10) {
    formData.data.otherFeeList.splice(index, 1);
  } else if (type == 20) {
    formData.data.purchaseDetailList.splice(index, 1);
  }
  handleChangeAmount();
  return ElMessage({
    message: "删除成功！",
    type: "success",
  });
};

const pushGoods = (goods) => {
  const arr = goods.map((x) => ({
    goodType: x.goodType,
    productCode: x.code,
    productName: x.name,
    productSpec: x.spec,
    productUnit: x.unit,
    count: 0,
    price: 0,
    bussinessId: x.id,
    amount: 0,
  }));
  formData.data.purchaseDetailList =
    formData.data.purchaseDetailList.concat(arr);
  openProduct.value = false;
  return ElMessage({
    message: "添加成功！",
    type: "success",
  });
};
// 提交方法
const formDom = ref(null);
const handleSubmit = async () => {
  const vaild = await formDom.value.validate();
  if (vaild) {
    if (formData.data.purchaseDetailList.length > 0) {
      const list = formData.data.purchaseDetailList;
      for (let i = 0; i < list.length; i++) {
        const e = list[i];
        if (ids.value.length > 0) {
          if (Number(e.subscribeCount) - Number(e.purchaseCount) > 0) {
            if (e.count == 0) {
              ElMessage({
                message: "本次采购数量不能为0！",
                type: "info",
              });
              return false;
            }
          }
          if (e.count + Number(e.purchaseCount) > Number(e.subscribeCount)) {
            ElMessage({
              message: "本次采购数量和已采购数量和不可大于申购数量！",
              type: "info",
            });
            return false;
          }
        } else {
          if (e.count == 0) {
            ElMessage({
              message: "本次采购数量不能为0！",
              type: "info",
            });
            return false;
          }
        }
      }
      return true;
    }
    ElMessage({
      message: "请添加采购明细！",
      type: "info",
    });
    return false;
  }

  return false;
};
// 获取用户信息并赋默认值
const userInfo = useUserStore().user;
onMounted(() => {
  formData.data.purchaseTime = proxy.parseTime(new Date());
  formData.data.deptName = userInfo.dept.deptName;
  formData.data.purchaseName = userInfo.nickName;
  getSupplierList();
  if (!route.query.processType) {
    ids.value = props.queryData.ids.split(",") || [];
    getDetails();
  }
  setTimeout(() => {
    if (!props.queryData.purchaseDetailList) return;
    formData.data = props.queryData;
    proxy
      .post("/subscribeDetail/detail", {
        ids: props.queryData.purchaseDetailList.map((item) => {
          return item.subscribeDetailId;
        }),
      })
      .then((res) => {
        console.log(formData.data.purchaseDetailList);
        formData.data.purchaseDetailList =
          props.queryData.purchaseDetailList.map((x, index) => ({
            ...res[index],
            subscribeCount: x.count,
            count: x.count,
            price: x.price,
            amount: x.amount,
          }));
        console.log(formData.data.purchaseDetailList);
      });
  }, 2000);
});

// 接收父组件的传值
const props = defineProps({
  queryData: String,
});

const ids = ref([]);
const getDetails = () => {
  proxy.post("/subscribeDetail/detail", { ids: ids.value }).then((res) => {
    console.log(res, "123123123123123123123123");
    formData.data.purchaseDetailList = res.map((x) => ({
      ...x,
      subscribeCount: x.count,
      count: Number(x.count) - Number(x.purchaseCount),
      price: null,
      amount: null,
    }));
  });
};
// 获取用户信息并赋默认值
// const tenantId = "@福建宏星！#￥%……&*（）";
const tenantId = userInfo.tenantId;
// 获取供应商数据
const supplierData = ref([]);
const fundsPaymentMethod = ref([]);
const getSupplierList = async (req) => {
  proxy
    .post("/supplierInfo/page", { pageNum: 1, pageSize: 9999 })
    .then((res) => {
      supplierData.value = res.rows;
    });

  proxy
    .post("/dictTenantData/page", {
      pageNum: 1,
      pageSize: 999,
      tenantId: tenantId,
      dictCode: "funds_payment_method",
    })
    .then((res) => {
      fundsPaymentMethod.value = res.rows;
    });
};
// 供应商改变逻辑
const handleChangeSupplier = (val) => {
  const ids = formData.data.purchaseDetailList.map((x) => x.bussinessId);
  proxy
    .post("/supplierPrice/getSupplierPriceByProductIds", {
      supplierInfoId: val,
      productIdList: ids,
    })
    .then((res) => {
      if (Object.keys(res).length > 0) {
        for (let i = 0; i < formData.data.purchaseDetailList.length; i++) {
          const e = formData.data.purchaseDetailList[i];
          for (const key in res) {
            if (e.bussinessId === key) {
              e.price = Number(res[key]);
            } else e.price = null;
          }
        }
      } else {
        for (let i = 0; i < formData.data.purchaseDetailList.length; i++) {
          const e = formData.data.purchaseDetailList[i];
          e.price = 0;
        }
      }
      handleChangeAmount();
    });
};
// 计算采购总金额
const handleChangeAmount = () => {
  let sum = 0;
  for (let i = 0; i < formData.data.purchaseDetailList.length; i++) {
    const e = formData.data.purchaseDetailList[i];
    e.amount = e.count * e.price;
    sum += e.amount;
  }
  for (let i = 0; i < formData.data.otherFeeList.length; i++) {
    const e = formData.data.otherFeeList[i];
    sum += e.price;
  }
  formData.data.amount = sum;
};

const productUnit = ref([]);
const getDict = () => {
  proxy.getDictOne(["unit"]).then((res) => {
    productUnit.value = res["unit"].map((x) => ({
      label: x.dictValue,
      value: x.dictKey,
    }));
  });
};
getDict();
// 向父组件暴露
defineExpose({
  submitData: formData.data,
  handleSubmit,
});
</script>


<style lang="scss" scoped>
._t {
  margin-bottom: 5px;
  font-size: 14px;
}
</style>