<script setup lang="ts">
import { reactive, ref, shallowRef, unref } from "vue";
import { httpBatchOrderList } from "/@/api/InvoiceSales/invoiceApply";
import { responseHandle } from "/@/utils/responseHandle";
import { useNav } from "/@/layout/hooks/nav";
import { ElMessage } from "element-plus";
import { useColumns } from "./columns";
import { useTypeOptions } from "/@/utils/status";

const emit = defineEmits(["reload", "confirm"]);

const { columns } = useColumns();

columns.value = columns.value.slice(1);

const { logout } = useNav();
const loading = ref(false);
const selected = ref([]);
const tableRef = ref();

const pagination = reactive({
  total: 0,
  pageSize: 15,
  currentPage: 1,
  background: true,
  pageSizes: [15, 50, 100]
});

const props = defineProps<{
  payload: object;
}>();

const sourceText = shallowRef("");
//列表展示
async function onSearch(sequenceNo = []) {
  loading.value = true;
  const { currentPage: page, pageSize: size } = pagination;
  const { code, data, message } = await httpBatchOrderList({
    ...props.payload,
    cxCode: sequenceNo.join(","),
    is_comon: "0",
    inv_is: "1",
    cat_status: "2",
    inv_status: "0",
    status: '3',
    page,
    size
  });

  responseHandle({
    code,
    message,
    logout,
    handler: () => {
      // const { li } = data ?? {};
      selected.value = data ?? [];
      // pagination.total = count ?? 0;
      sourceText.value = "";
    }
  });
  loading.value = false;
}

const $space = " ";
const $wrap = "\n";
const replaceTextWrapAndSpace = function (text = "") {
  if (!text) return "";
  let _text = text;
  const hasSpace = _text.includes($space);
  const hasWrap = _text.includes($wrap);
  if (hasSpace) _text = _text.split($space).join("");
  if (hasWrap) _text = _text.split($wrap).join("");
  return _text;
};

function handleEnter() {
  const text = replaceTextWrapAndSpace(sourceText.value);
  /* 去掉回车和空格 **/
  if (text.length === 0) {
    ElMessage.warning("不能解析空文本");
    sourceText.value = text;
    return;
  }

  /* 统一替换字符 **/
  const parserText = text.replace(/[,。;、; .]/g, ",");
  const sequenceNo = parserText.split(",");
  onSearch(sequenceNo);
}

function handleConfirm() {
  if (selected.value.length === 0) {
    return ElMessage.error("至少添加一个销售订单!");
  }

  //商品数量或开票金额为空
  const noConfirm = selected.value.filter(o => o.winv_fee === "0.00");
  const noInvNum = selected.value.filter(o => String(o.winv_num) === "0");

  if (noConfirm.length !== 0) {
    return ElMessage.error(`销售订单 ${noConfirm[0].sequenceNo} 开票金额为零`);
  }

  if (noInvNum.length !== 0) {
    return ElMessage.error(`销售订单 ${noInvNum[0].sequenceNo} 开票数量为零`);
  }

  emit("confirm", unref(selected));
}
</script>

<template>
  <div relative>
    <ElInput
      :rows="4"
      v-model="sourceText"
      style="margin-bottom: 10px"
      placeholder="输入销售订单主编号(小于100条),系统支持的分割符为逗号(,)、句号(.)、分号(;)、顿号(、),回车后开始解析。"
      type="textarea"
      @keydown.enter="handleEnter"
    />

    <div v-loading="loading">
      <PureTable
        ref="tableRef"
        border
        align="left"
        row-key="id"
        table-layout="auto"
        :size="'small'"
        :data="selected"
        :columns="columns"
        max-height="560px"
        :header-cell-style="{ background: '#fafafa', color: '#606266' }"
      >
        <template #platform_type="scope">
          <el-tag>{{
            useTypeOptions.find(
              ({ value }) => value === scope.row.platform_type
            )?.label || "--"
          }}</el-tag>
        </template>
      </PureTable>
    </div>

    <div class="flex justify-end mt-10px">
      <el-button type="primary" @click="handleConfirm" size="small"
        >保存</el-button
      >
    </div>
  </div>
</template>

<style lang="scss" scoped>
:deep(.el-pagination) {
  justify-content: flex-start !important;
}

.search {
  padding: 0px !important;
}
</style>