<template>
  <basic-container>
    <!-- 首页表格 -->
    <div class="avue-crud">
      <!-- 搜索模块 -->
      <div v-h5uShow="search">
        <!-- 查询模块 -->
        <el-form :inline="true" :model="TopQuery" class="header_search">
          <el-form-item label="最新入库时间">
            <el-date-picker
              v-model="TopQuery.warehouseEntryTime"
              type="datetimerange"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              format="YYYY-MM-DD"
              date-format="YYYY/MM/DD"
              time-format="A"
              @change="Toptiem"
            />
          </el-form-item>

          <el-form-item label="文员复核时间">
            <el-date-picker
              v-model="TopQuery.signinTime"
              type="datetimerange"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              format="YYYY-MM-DD"
              date-format="YYYY/MM/DD"
              time-format="A"
              @change="Toptiem"
            />
          </el-form-item>

          <el-form-item label="签收扫描时间">
            <el-date-picker
              v-model="TopQuery.scanSingnTime"
              type="datetimerange"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              format="YYYY-MM-DD"
              date-format="YYYY/MM/DD"
              time-format="A"
              @change="Toptiem"
            />
          </el-form-item>

          <!-- 查询按钮 -->
          <el-form-item class="el-btn">
            <el-button type="primary" icon="el-icon-search" @click="searchChange">搜 索</el-button>
            <el-button icon="el-icon-delete" @click="searchReset()">清 空</el-button>
          </el-form-item>
        </el-form>
      </div>

      <!-- 控件模块 -->
      <el-row>
        <div class="avue-crud__header">
          <!-- 头部左侧按钮模块 -->
          <div class="avue-crud__left">
            <el-button type="primary" @click="exportExcel"
              ><el-icon><Download /></el-icon>导出</el-button
            >
          </div>
          <!-- 头部右侧按钮模块 -->
          <div class="avue-crud__right">
            <el-button icon="el-icon-refresh" @click="searchChangeS" circle></el-button>
            <el-button icon="Operation" @click="showdrawer(true)" circle></el-button>
            <el-button icon="Search" @click="searchHide" circle></el-button>
          </div>
        </div>
      </el-row>

      <!-- 首页表格 -->
      <el-row>
        <!-- 列表模块 -->
        <tablecmt
          class="tableNode"
          :columnList="columnList"
          :tableData="data"
          :loading="loadingObj.list"
          :initFn="getrain"
          @inputTxt="inputsc"
          @timeCheck="timesc"
          @btnCheck="btnsc"
          @selectCheck="selectsc"
          @selection="selectionChange"
        >
          <template #default="slotProps">
            <template v-if="slotProps.scope.column.label === '订单自编号'">
              <el-text class="el_textBtn" @click="OrdernumberClick(slotProps.scope.row)">
                {{
                  slotProps.scope.column.label === '订单自编号' ? slotProps.scope.row.orderCode : ''
                }}
              </el-text>
            </template>

            <template v-if="slotProps.scope.column.label === '预约信息'">
              <el-text
                class="el_textBtn"
                v-for="(item, index) in slotProps.scope.row.reservationInfo.split(',')"
                :key="index"
                @click="informationClick(item.trim(), slotProps.scope.row)"
              >
                {{`${item}` }}
              </el-text>
            </template>

            <template v-if="slotProps.scope.column.label === '操作'">
              <div class="ElBtnClass">
                <el-button @click="view(slotProps.scope)">查看</el-button>
              </div>
            </template>
          </template>
        </tablecmt>
      </el-row>

      <!-- 分页模块 -->
      <el-row class="el-fy">
        <div class="avue-crud__pagination flex-c-sb" style="width: 100%">
          <div></div>
          <el-pagination
            align="right"
            background
            @size-change="sizeChange"
            @current-change="currentChange"
            :current-page="page.currentPage"
            :page-sizes="[30, 50, 80, 120]"
            :page-size="page.pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="page.total"
          >
          </el-pagination>
        </div>
      </el-row>
    </div>
  </basic-container>
  <!-- 列表配置显示 -->
  <edittablehead
    @setcolum="setnewcolum"
    @closce="showdrawer"
    :drawerShow="drawerShow"
    :columnList="details.columnList"
  ></edittablehead>
</template>

<script setup>
import { ref, reactive, toRefs, computed, onMounted, nextTick, watch } from 'vue';
import { columnList } from '@/option/warehouse/distributionStockArticle.js';
import { getDictionaryBiz } from '@/api/system/dict'; //字典
import { processRowProperty, setNodeHeight } from '@/utils/util';
import {
  $_signforList,
  $_signforDistributionStockArticleList,
} from '@/api/distribution/distributionStockArticle.js';
import functions from '@/utils/functions.js';
import { ElMessageBox, ElMessage } from 'element-plus';
import { downloadXls } from '@/utils/util';
const $router = useRouter(); //跳转
import { useStore } from 'vuex';
import dayjs from 'dayjs';
const TopQuery = ref({});
const queryCarn = ref({});
const details = reactive({
  /** 是否开启搜索 */
  search: false,
  /** 表格搜索条件 */
  query: {},
  /** 时间快捷选择设置 */
  shortcuts: [
    {
      text: '最近一周',
      value: () => {
        const end = new Date();
        const start = new Date();
        start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
        return [start, end];
      },
    },
    {
      text: '最近一个月',
      value: () => {
        const end = new Date();
        const start = new Date();
        start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
        return [start, end];
      },
    },
    {
      text: '最近三个月',
      value: () => {
        const end = new Date();
        const start = new Date();
        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
        return [start, end];
      },
    },
  ],
  /** 时间选择器数据 */
  stockupDate: [],
  /** 列表 */
  columnList,

  /** 列表数据 */
  data: [],
  /** 页面loading */
  loadingObj: {
    /** 列表加载loading */
    list: false,
    packageListLoading: false,
  },
  /** 列表复选框选中的数据 */
  selectionList: [],
  /** 是否显示设置表格 */
  drawerShow: false,
  /** 分页参数 */
  page: {
    currentPage: 1,
    pageSize: 50,
    total: 0,
  },

  /** 弹出层显示 */
  popUpShow: {
    /** 包件明细 */
    packageOrderListlVisited: false,
    /** 二维码 */
    QRCodeVisible: false,
    /** 修改客户信息 */
    editClientInfoVisible: false,
  },
  /** 列表Dom节点 */
  listNode: '',
  form: {},
  /** 全屏 */
  fullscreenObj: {
    /** 包明细 */
    packageOrderListlVisited: false,
  },
});

const {
  search,
  query,
  shortcuts,
  stockupDate,
  data,
  loadingObj,
  selectionList,
  drawerShow,
  page,
  trickleLoadingPage,
  zeroAdditionalRecordingInfo,
  popUpShow,
  recorddata,
} = toRefs(details);
/**
 * 设置列表 -- 固定函数
 * 弹窗的勾选回调，用于更改头部数组
 * 固定搭配，只需要更换   columnList
 *  */
const setnewcolum = (newarr, headarr, type) => {
  if (type == 1) {
    details.columnList = newarr;
    functions.setStorage(window.location.pathname + 'checkList', headarr);
  } else if (type == 2) {
    details.columnList = newarr;
    functions.setStorage(window.location.pathname + 'flexList', headarr);
  } else if (type == 3) {
    details.columnList = newarr;
    functions.setStorage(window.location.pathname + 'sortlist', headarr);
  }
};
/** 展开列表控件 */
const showdrawer = _flag => {
  details.drawerShow = _flag;
};
/** 表格表头输入框搜索 */
const inputsc = (index, row) => {
  details.query[row.prop] = index;
  processRowProperty(index, row, details);
};
// 实例函数
const informationClick = (item, row) => {

  const cleanedItem = item.replace(/\([^)]*\)/g, '');
  console.log(cleanedItem, 'cleanedItem');
  console.log(row, 'row');
  // 尝试使用 HTML 字符串
  const message = `将跳转预约信息为 <b><span style="color: red;">${cleanedItem}</span></b>是否确认!`;
  ElMessageBox.confirm(
    message,
    '提示',
    {
      dangerouslyUseHTMLString: true,
      confirmButtonText: '确认',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
     let data= row.info.find(res=>res.reservationCode ==cleanedItem)

      $router.push({
    path: '/distribution/signfor/distributionSignforedt',
    query: {
      id: data.id,
      reservationId:data.reservationId,
      name: `${data.reservationCode}待签收查看`,
      isZero: 0,
    },
  });
    })
    .catch(() => {
    
    })
};
/** 表格表头时间选择 */
const timesc = (index, row) => {
  console.log(index, row);
  if (!!index) {
    index = dayjs(index).format('YYYY-MM-DD');
  }
  details.query[row.prop] = index;
  if (!index) {
    delete details.query[row.prop];
  }
};

/** 表格表头输入框搜索 */
const btnsc = val => {
  console.log(val);
};
/** 表格表头下拉框选择 */
const selectsc = (index, row) => {
  processRowProperty(index, row, details);
};
/** 表格表头复选框选择 */
const selectionChange = list => {
  console.log(list);
  details.selectionList = list;
};
// 网页顶部搜索按钮
const searchChange = () => {
  // 日期处理
  if (TopQuery.value.warehouseEntryTime) {
    queryCarn.value.warehouseEntryTimeStart = dayjs(TopQuery.value.warehouseEntryTime[0]).format(
      'YYYY-MM-DD HH:mm:ss'
    ); //开始日期
    queryCarn.value.warehouseEntryTimeEnd = dayjs(TopQuery.value.warehouseEntryTime[1]).format(
      'YYYY-MM-DD HH:mm:ss'
    ); //结束日期
  } else {
    delete queryCarn.value.warehouseEntryTimeStart;
    delete queryCarn.value.warehouseEntryTimeEnd;
  }

  if (TopQuery.value.signinTime) {
    queryCarn.value.signingTimeStart = dayjs(TopQuery.value.signinTime[0]).format(
      'YYYY-MM-DD HH:mm:ss'
    ); //开始日期
    queryCarn.value.signingTimeEnd = dayjs(TopQuery.value.signinTime[1]).format(
      'YYYY-MM-DD HH:mm:ss'
    ); //结束日期
  } else {
    delete queryCarn.value.signingTimeStart;
    delete queryCarn.value.signingTimeEnd;
  }

  // 签收扫描时间
  if (TopQuery.value.scanSingnTime) {
    queryCarn.value.scanSigningTimeStart = dayjs(TopQuery.value.scanSingnTime[0]).format(
      'YYYY-MM-DD HH:mm:ss'
    ); //开始日期
    queryCarn.value.scanSigningTimeEnd = dayjs(TopQuery.value.scanSingnTime[1]).format(
      'YYYY-MM-DD HH:mm:ss'
    ); //结束日期
  } else {
    delete queryCarn.value.scanSigningTimeStart;
    delete queryCarn.value.scanSigningTimeEnd;
  }

  getrain();
};
// 每页多少条
const sizeChange = val => {
  page.value.pageSize = val;
  getrain();
};
/** 页码改变执行的回调 */
const currentChange = val => {
  page.value.currentPage = val;
  getrain();
};
// 刷新按钮
const searchChangeS = () => {
  details.search = false; //关闭搜索
  getrain();
};
// 顶部搜索
const searchHide = () => {
  console.log(details);
  details.search = !details.search;
  const _node = document.querySelector('.tableNode');
  setNodeHeight(_node, '', true);
};
// 导出

const exportExcel = () => {
  if (!Object.values(queryCarn.value).length || Object.values(details.query).length) {
    ElMessage({
      message: '请输入查询条件',
      type: 'warning',
    });
    return;
  }
  ElMessageBox.confirm('是否导出数据?', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    type: 'warning',
  })
    .then(() => {
      let data = {
        current: details.page.currentPage,
        size: details.page.pageSize,
        ...details.query,
        ...queryCarn.value,
      };
      $_signforDistributionStockArticleList(data).then(res => {
        downloadXls(res.data, `已签订单.xlsx`);
        ElMessage({
          message: '导出成功',
          type: 'success',
        });
      });
    })
    .catch(() => {});
};

// 清空
const searchReset = () => {
  TopQuery.value = {};
  details.query = {};
  details.columnList.forEach(item => {
    item.values = '';
  });
  details.page.total = 0;
  details.data = [];
};
// 字典公共函数
function updateDictionary(targetArray, dictionaryType) {
  getDictionaryBiz(dictionaryType).then(res => {
    console.log(res, '字典');
    res.data.data.forEach(item => {
      targetArray.push({
        value: item.dictKey,
        label: item.dictValue,
      });
    });
  });
}

// 页面初始化方法
// const onLoad = () => {
//   warehouseList.value = [];

//   columnList.find(res => res.label == '配送类型').checkarr = [];
//   columnList.find(res => res.label == '配送类型').checkarr = DeliveryTypeList.value;
//   columnList.find(res => res.label == '配送种类').checkarr = [];
//   columnList.find(res => res.label == '配送种类').checkarr = DeliverygenericList.value;
//   columnList.find(res => res.label == '仓库').checkarr = [];
//   columnList.find(res => res.label == '仓库').checkarr = warehouseList.value;

//   console.log(columnList, 'columnList');
//   // 获取仓库

//   $_getMyWarehouseList().then(res => {
//     console.log(res, '仓库列表');
//     if (res.data.data.length)
//       res.data.data.forEach(item => {
//         warehouseList.value.push({
//           value: item.name,
//           label: item.name,
//         });
//       });
//   });
// };
// onLoad();

// 获取数据
const getrain = () => {
  if (details.loadingObj.list) return;

  if (Object.keys(details.query).length === 0 && Object.keys(queryCarn.value).length === 0) {
    details.page.total = 0;
    details.data = [];

    return;
  }

  let data = {
    current: details.page.currentPage,
    size: details.page.pageSize,
    ...details.query,
    ...queryCarn.value,
  };
  details.loadingObj.list = true;
  $_signforList(data)
    .then(res => {
      const { code, data } = res.data;

      if (code !== 200) return;
      console.log(res, '当前参数');

      details.page.total = data ? data.total || 0 : 0;
      details.data = data ? data.records || [] : 0;
    })
    .catch(() => {})
    .finally(() => {
      details.loadingObj.list = false;
    });
};
// getrain();

const removeParentheses = str => {
  const index = str.indexOf('('); // 找到左括号的位置
  if (index !== -1) {
    return str.substring(0, index); // 删除左括号及其后面的内容
  }
  return str;
};
// 预约信息

const OrdernumberClick = val => {
  $router.push({
    path: '/distribution/inventory/distributionStockArticleDetails',
    query: {
      id: val.id,
      name: `${val.orderCode}预约单详情`,
      isZero: 0,
    },
  });
};
</script>

<style scoped lang="scss">
.ElBtnClass button {
  border: none;
  padding: 0;
  background-color: transparent;
}
:deep(.el-card) {
  height: 100%;
}
:deep(.el-card__body) {
  height: 100%;
  display: flex;
  flex-direction: column;
}
.el-fy {
  flex: 1;
  display: flex;
  align-items: flex-end;
  margin-bottom: 10px;
}
.avue-crud {
  height: 100%;
  display: flex;
  flex-direction: column;
}

:deep(.el-date-editor.el-input__wrapper) {
  height: 100% !important;
}
</style>
