<template>
  <div class="p-2">
    <!--查询区域-->
    <div class="jeecg-basic-table-form-container">
      <a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
        <a-row :gutter="24">
          <!-- <a-col :lg="6">
            <a-form-item name="categoryId">
              <template #label><span title="物料类别">物料类别</span></template>
              <j-dict-select-tag type='list' placeholder="请选择物料类别" v-model:value="queryParam.categoryId" dictCode="nu_config_material_category,category_name,id,iz_enabled = 0 and del_flag = 0" allow-clear />
            </a-form-item>
          </a-col>
          <a-col :lg="6">
            <a-form-item name="typeId">
              <template #label><span title="物料类型">物料类型</span></template>
              <j-dict-select-tag type='list' placeholder="请选择物料类型" v-model:value="queryParam.typeId" :dictCode="`nu_config_material_type,type_name,id,iz_enabled = 0 and del_flag = 0 and category_id = ${queryParam.categoryId || -1}`" allow-clear />
            </a-form-item>
          </a-col>
            <a-col :lg="6">
              <a-form-item name="medicationId">
                <template #label><span title="用药类型">用药类型</span></template>
                <j-dict-select-tag type='list' placeholder="请选择用药类型" v-model:value="queryParam.medicationId" :dictCode="`config_material_medication,medication_name,id,iz_enabled = 0 and del_flag = 0 and type_id = ${queryParam.typeId || -1}`" allow-clear />
              </a-form-item>
            </a-col> -->
            <a-col :lg="6">
              <a-form-item name="materialName">
                <template #label><span title="货品名称">货品名称</span></template>
                <j-input placeholder="请输入货品名称" v-model:value="queryParam.materialName" allow-clear ></j-input>
              </a-form-item>
            </a-col>
            <a-col :lg="6">
              <a-form-item name="materialNo">
                <template #label><span title="货品编码">货品编码</span></template>
                <j-input placeholder="请输入货品编码" v-model:value="queryParam.materialNo" allow-clear ></j-input>
              </a-form-item>
            </a-col>
            <a-col :lg="6">
              <a-form-item name="pinyin">
                <template #label><span title="拼音检索">拼音检索</span></template>
                <j-input placeholder="请输入拼音" v-model:value="queryParam.pinyin" allow-clear ></j-input>
              </a-form-item>
            </a-col>
            <a-col :lg="6">
              <a-form-item name="izEnabled">
                <template #label><span title="是否启用">是否启用</span></template>
                <j-dict-select-tag type='list' placeholder="请选择是否启用" v-model:value="queryParam.izEnabled" dictCode="iz_enabled" allow-clear />
              </a-form-item>
            </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
              <a-col :lg="6">
                <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
                <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
              </a-col>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <div>
        <div style="width:300px;float: left;">
          <div style="with: 100%;display: flex;">
            <div class="all-card">
              <div v-for="(item, index) in treeData" :key="index" style="position: relative;">
                <div :class="clickCount === index ? 'card-target' : 'card'" :style="getCardStyle(index,treeData.length)" @click="handleClick(index,item)">
                  <img src="/src/assets/images/logo.png" width="30" height="30" />
                  <span style="margin-top: 8px;">{{ item.title }}</span>
                </div>
                <div v-show="clickCount === index && index !== 4" class="sanjiao-down"></div>
                <div v-show="clickCount === index && index" class="sanjiao-up"></div>
              </div>
            </div>
            <div style="background: #fff;border-radius: 0px 5px 5px 5px ;width: calc(100% - 80px);">
              <a-menu
                  v-model:openKeys="openKeys"
                  v-model:selectedKeys="selectedKeys"
                  style="height:700px;overflow-y:auto;overflow-x: hidden;"
                  mode="inline"
                >
                <template v-for="(item2,key2) in treeChildData" >
                  <a-sub-menu v-if="item2.children.length>0" :key="`sub`+key2" style="margin:20px;background-image: url('../resource/img/bj.png');text-align:center;border-radius:5px;">
                    <template #title>
                      <div style="height:50px;line-height:50px;">
                        <span><img src="/src/assets/images/logo.png" width="30" height="30" /></span><span style="margin-left: 10px;">{{item2.title}}</span>
                      </div>
                    </template>
                    <a-menu-item v-for="(item3,key3) in item2.children"  :key="key3" style="height:50px;text-align:left;" >
                      <div @click="onSelect(item3)">
                        <span style="font-size: 18px;">·</span> <span style="margin-left: 10px;">{{item3.title}}</span>
                      </div>
                    </a-menu-item>
                  </a-sub-menu>
                  <a-menu-item v-if="item2.children.length==0" :key="`sub`+key2" style="margin:20px;background-image: url('../resource/img/bj.png');text-align:center;border-radius:5px;width:85%;height:50px;line-height:50px;">
                      <div @click="onSelect(item2)">
                        <span><img src="/src/assets/images/logo.png"  width="30" height="30"/></span><span style="margin-left: 10px;">{{item2.title}}</span>
                      </div>
                  </a-menu-item>
                </template>
              </a-menu>
            </div>
          </div>
        </div>
        <div style="width:calc(100% - 320px);float: left;margin-left: 20px;">
          <!--引用表格-->
          <BasicTable @register="registerTable" >
            <!--插槽:table标题-->
            <template #tableTitle>
              <a-button type="primary" v-auth="'configMaterialInfo:config_material_info:add'"  @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
              <a-button  type="primary" v-auth="'configMaterialInfo:config_material_info:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
              <j-upload-button  type="primary" v-auth="'configMaterialInfo:config_material_info:importExcel'"  preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
            </template>
            <!--操作栏-->
            <template #action="{ record }">
              <TableAction :actions="getTableAction(record)" />
            </template>
            <template v-slot:bodyCell="{ column, record, index, text }">
            </template>
          </BasicTable>
        </div>

    </div>
        

        
    
    <!-- 表单区域 -->
    <ConfigMaterialInfoModal ref="registerModal" @success="handleSuccess"></ConfigMaterialInfoModal>
  </div>
</template>

<script lang="ts" name="configMaterialInfo-configMaterialInfo" setup>
  import { ref, reactive,onMounted } from 'vue';
  import { BasicTable, useTable, TableAction } from '/@/components/Table';
  import { useListPage } from '/@/hooks/system/useListPage';
  import { columns, superQuerySchema } from './ConfigMaterialInfo.data';
  import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './ConfigMaterialInfo.api';
  import { downloadFile } from '/@/utils/common/renderUtils';
  import ConfigMaterialInfoModal from './components/ConfigMaterialInfoModal.vue'
  import { useUserStore } from '/@/store/modules/user';
  import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
  import JSwitch from '/@/components/Form/src/jeecg/components/JSwitch.vue';
  import JSelectMultiple from '/@/components/Form/src/jeecg/components/JSelectMultiple.vue';
  import { JInput } from '/@/components/Form';
  import type { TreeProps } from 'ant-design-vue';
  import { DownOutlined } from '@ant-design/icons-vue';
import { defHttp } from '/@/utils/http/axios';
import type { CollapseProps } from 'ant-design-vue';

  const formRef = ref();
  const queryParam = reactive<any>({});
  const toggleSearchStatus = ref<boolean>(false);
  const registerModal = ref();
  const userStore = useUserStore();
  let treeData = ref<any>([]);
  let treeChildData = ref<any>([]);
  const activeKey =  ref(0);
  const activeKey2 =  ref(0);
  const rootSubmenuKeys= ['sub1']
  const openKeys= []
  const selectedKeys= []
  const clickCount = ref(0);
  /**
   * 点击菜单
   * @param index 菜单索引
   * @param lengths 菜单数量
   * @param item 菜单数据
   */
const handleClick = (index,item) => {
  clickCount.value = index;
  treeChildData.value = item.children;

};
const getCardStyle = (index,allSize) => {
  const style = {borderBottomLeftRadius:'',borderTopLeftRadius:''};
  if (clickCount.value - 1 === index) {
    style.borderBottomLeftRadius  = '5px';
  }
  if (clickCount.value + 1 === index) {
    style.borderTopLeftRadius= '5px';
  }
  if(!index){
    style.borderTopLeftRadius= '5px';
  }
  if(index === allSize){
    style.borderBottomLeftRadius= '5px';
  }
  return style;
};
  //注册table数据
  const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
    tableProps: {
      title: '物料信息',
      api: list,
      columns,
      canResize:false,
      useSearchForm: false,
           showIndexColumn: true,
      actionColumn: {
        width: 160,
        fixed: 'right',
      },
      beforeFetch: async (params) => {
        return Object.assign(params, queryParam);
      },
    },
    exportConfig: {
      name: "物料信息",
      url: getExportUrl,
      params: queryParam,
    },
	  importConfig: {
	    url: getImportUrl,
	    success: handleSuccess
	  },
  });
  const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
  const labelCol = reactive({
    xs:24,
    sm:6,
    xl:6,
    xxl:6
  });
  const wrapperCol = reactive({
    xs: 24,
    sm: 20,
  });

  function onOpenChange  (openKeys: string[]){
      const latestOpenKey = openKeys.find(key => openKeys.indexOf(key) === -1);
      if (rootSubmenuKeys.indexOf(latestOpenKey!) === -1) {
        openKeys = openKeys;
      } else {
        openKeys = latestOpenKey ? [latestOpenKey] : [];
      }
    };

  function onSelect({ key, domEvent }) {
    // console.log(ids);
    // console.log(e);
    // let id = ids[0];
    queryParam.treeId =key;
    reload();
  }
  /**
   * 高级查询事件
   */
  function handleSuperQuery(params) {
    Object.keys(params).map((k) => {
      queryParam[k] = params[k];
    });
    searchQuery();
  }

  /**
   * 新增事件
   */
  function handleAdd() {
    registerModal.value.disableSubmit = false;
    registerModal.value.add();
  }
  
  /**
   * 编辑事件
   */
  function handleEdit(record: Recordable) {
    registerModal.value.disableSubmit = false;
    registerModal.value.edit(record);
  }
   
  /**
   * 详情
   */
  function handleDetail(record: Recordable) {
    registerModal.value.disableSubmit = true;
    registerModal.value.edit(record);
  }
   
  /**
   * 删除事件
   */
  async function handleDelete(record) {
    await deleteOne({ id: record.id }, handleSuccess);
  }
   
  /**
   * 批量删除事件
   */
  async function batchHandleDelete() {
    await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
  }
   
  /**
   * 成功回调
   */
  function handleSuccess() {
    (selectedRowKeys.value = []) && reload();
  }
   
  /**
   * 操作栏
   */
  function getTableAction(record) {
    return [
      {
        label: '编辑',
        onClick: handleEdit.bind(null, record),
        auth: 'configMaterialInfo:config_material_info:edit'
      },
      {
        label: '详情',
        onClick: handleDetail.bind(null, record),
      }, {
        label: '删除',
        popConfirm: {
          title: '是否确认删除',
          confirm: handleDelete.bind(null, record),
          placement: 'topLeft',
        },
        auth: 'configMaterialInfo:config_material_info:delete'
      }
    ];
  }
   

  /**
   * 查询
   */
  function searchQuery() {
    reload();
  }
  
  /**
   * 重置
   */
  function searchReset() {
    formRef.value.resetFields();
    selectedRowKeys.value = [];
    queryParam.treeId = null;
    //刷新数据
    reload();
  }

    
  // 自动请求并暴露内部方法
  onMounted(() => {
    defHttp.get({url:'/ConfigMaterial/configMaterialCategory/getMaterialTreeData'}).then(res =>{
      treeData.value = res;
      console.log("🚀 ~ defHttp.get ~ treeData:", treeData)
      console.log("🚀 ~ defHttp.get ~ res:", res)
      if(treeData.value.length > 0){
        treeChildData.value = treeData.value[0].children;
      }

    })
  });


</script>

<style lang="less" scoped>
  .jeecg-basic-table-form-container {
    padding: 0;
    .table-page-search-submitButtons {
      display: block;
      margin-bottom: 24px;
      white-space: nowrap;
    }
    .query-group-cust{
      min-width: 100px !important;
    }
    .query-group-split-cust{
      width: 30px;
      display: inline-block;
      text-align: center
    }
    .ant-form-item:not(.ant-form-item-with-help){
      margin-bottom: 16px;
      height: 32px;
    }
    :deep(.ant-picker),:deep(.ant-input-number){
      width: 100%;
    }
  }

  .all-card {
  width: 80px;
  height: 730px;
  // background-color: rgb(217, 230, 239);
  // display: flex;
  /* justify-content: flex-end; */
  align-items: flex-end;
  flex-direction: column;
  // padding-top: 10px;
}

.card {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 80px;
  height: 120px;
  flex-direction: column;
  background-color: rgb(243, 248, 251);
  /* border-radius: 25px; */
}

.card-target {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 80px;
  height: 120px;
  flex-direction: column;
  background-color: #fff;
  border-top-left-radius: 30px;
  border-bottom-left-radius: 30px;
  /* position: relative; */
  /* border-radius: 10px; */
}

.sanjiao-down {
  position: absolute;
  bottom: -26px;
  left: 17px;
  width: 64px;
  /* 上边长度 */
  height: 27px;
  /* 右边长度 */
  background-color: #fff;
  /* 三角形填充色 */
  /* 三点依次为：右上 (100% 0)，右下 (100% 100%)，左上 (0 0) */
  clip-path: polygon(100% 0, 100% 100%, 0 0);
  z-index: 999;
}

.sanjiao-up {
  position: absolute;
  top: -26px;
  left: 17px;
  width: 64px;
  height: 27px;
  background-color: #fff;
  /* 三点依次为：右下 (100% 100%)，左下 (0 100%)，右上 (100% 0) */
  clip-path: polygon(100% 100%, 0 100%, 100% 0);
  z-index: 999;
}
</style>
