<script lang="ts" setup>
/**
 * @Name: index.vue
 * @Description: 公司SKU
 * @Author: Cheney
 */
import { RefreshLeft, Search } from '@element-plus/icons-vue';
import DataTable from './component/DataTable.vue';
import VerticalDivider from '/@/components/VerticalDivider/index.vue';
import { useTableHeight } from '/@/utils/useTableHeight';
import { useResponse } from '/@/utils/useResponse';
import * as api from './api';


const titleContainer: Ref<HTMLElement | null> = useTemplateRef('titleContainer');
const queryContainer: Ref<HTMLElement | null> = useTemplateRef('queryContainer');
const { tableHeight } = useTableHeight(titleContainer, queryContainer);

const tableRef: Ref<any> = useTemplateRef('table');

const btnLoading = ref(false);
const resetLoading = ref(false);

const formInline = reactive<any>({
  brandName: '',
  kind: '',
  status: '',
  sku: ''
});
provide('query-parameter', formInline);

const brandOptions: any = ref([]);
const kindOptions: any = ref([]);
const statusOptions: any = ref([
  { key: 1, name: '草稿' },
  { key: 3, name: '已发布' }
]);

onBeforeMount(() => {
  fetchOptions();
});

async function fetchOptions() {
  brandOptions.value = (await useResponse(api.getBrandOptions)).data;
  kindOptions.value = (await useResponse(api.getKindOptions)).data;
}

async function handleQuery() {
  btnLoading.value = true;
  await tableRef.value?.fetchList(true);
  btnLoading.value = false;
}

async function resetParameter() {
  for (const key in formInline) {
    formInline[key] = '';
  }
  resetLoading.value = true;
  await tableRef.value?.fetchList(true);
  resetLoading.value = false;
}
</script>

<template>
  <div class="p-5">
    <el-card class="h-full" style="color: rgba(0, 0, 0, 0.88);">
      <div ref="titleContainer" class="text-xl font-semibold pb-5">公司SKU</div>
      <!-- 查询条件 -->
      <div ref="queryContainer" class="flex justify-between">
        <div class="flex flex-1">
          <div class="w-full whitespace-nowrap">
            <el-row :gutter="20" style="margin-bottom: 5px;">
              <el-col :span="5">
                <div class="flex items-center">
                  <span class="mr-2">品牌名称</span>
                  <el-select v-model="formInline.brandName" clearable placeholder="请选择品牌名称">
                    <el-option v-for="item in brandOptions" :key="item.id" :label="item.brand_name" :value="item.id" />
                  </el-select>
                </div>
              </el-col>
              <el-col :span="5">
                <div class="flex items-center">
                  <span class="mr-2">种 类</span>
                  <el-select v-model="formInline.kind" clearable placeholder="请选择种类">
                    <el-option v-for="item in kindOptions" :key="item.id" :label="item.name" :value="item.id" />
                  </el-select>
                </div>
              </el-col>
              <el-col :span="4">
                <div class="flex items-center">
                  <span class="mr-2">状 态</span>
                  <el-select v-model="formInline.status" clearable placeholder="请选择状态">
                    <el-option v-for="item in statusOptions" :key="item.key" :label="item.name" :value="item.key" />
                  </el-select>
                </div>
              </el-col>
              <el-col :span="6">
                <div class="flex items-center">
                  <span class="mr-2">SKU</span>
                  <el-input v-model="formInline.sku" clearable placeholder="请输入SKU" />
                </div>
              </el-col>
            </el-row>
          </div>
        </div>
        <VerticalDivider />
        <div class="flex gap-1.5 ml-5">
          <el-button :icon="Search" :loading="btnLoading" type="primary" @click="handleQuery">
            查 询
          </el-button>
          <el-button :icon="RefreshLeft" :loading="resetLoading" color="#ECECF1C9" style="width: 88px; color: #3c3c3c;" 
                     @click="resetParameter">
            重 置
          </el-button>
        </div>
      </div>
      <el-divider ref="dividerContainer" style="margin: 20px 0 12px 0;" />
      <div :style="{ height: tableHeight + 'px' }">
        <DataTable ref="table" />
      </div>
    </el-card>
  </div>
</template>

<style scoped>

</style>
