<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="background: white; border-radius: 8px;padding: 8px;margin-right: 8px;height: 720px;overflow-y:auto;">
            <div style="text-align: right;">
              <a-radio-group v-model:value="treeParam.izEnabled" @change="getTreeData">
                <a-radio-button value="">全部</a-radio-button>
                <a-radio-button value="0">启用</a-radio-button>
              </a-radio-group>
            </div>
            <div style="width:100%;text-align: right;" v-if="treeData.length == 0">
              <a-button type="primary" v-auth="'ConfigMaterial:config_material_category:add'" @click="handleAddbj({levle:'1'})" preIcon="ant-design:plus-outlined"> 一级分类</a-button>
            </div>
            <a-tree class="draggable-tree" draggable block-node :tree-data="treeData" >
              <template #title="{ data,title }">
                <div @mouseenter="data.showContent = true" @mouseleave="data.showContent = false">
                  <span @click="handleSearch(data)">{{title}}</span>
                  <span v-if="data?.izEnabled == '1'" style="color:red;">(已停用)</span>
                  <span v-show="data.showContent" style="margin-left: 5px;">
                    <!-- 下拉菜单 -->
                    <a-dropdown>
                      <a class="ant-dropdown-link" @click.prevent>
                        <Icon icon="ant-design:setting-outlined" />
                      </a>
                      <template #overlay>
                        <a-menu>
                          <a-menu-item v-if="data.levle	 == '1'">
                            <a href="javascript:;" @click="handleAddbj(data)">添加本级</a>
                          </a-menu-item>
                          <a-menu-item v-if="(data.levle	 == '1' || data.levle	 == '2') && data.tjxj == 0  && data.parentIzEnabled == 0  && data.izEnabled == '0'">
                            <a href="javascript:;" @click="handleAddxj(data)">添加下级</a>
                          </a-menu-item>
                          <a-menu-item v-if="data?.children?.length == 0 && data.parentIzEnabled == 0 && data.izEnabled == '0'">
                            <a href="javascript:;" @click="handleAdd(data)">添加物料</a>
                          </a-menu-item>
                          <a-menu-item v-if="data.parentIzEnabled == 0 && data.izEnabled == '0'">
                            <a href="javascript:;" @click="handleFenleiEdit(data)">重命名</a>
                          </a-menu-item>
                          <a-menu-item v-if="(data.izEnabled == '1' && data.parentIzEnabled == 0)  || (data.parentIzEnabled == 1 && data.levle == '1')">
                            <a href="javascript:;" @click="handleQyty(data,'0')">启用</a>
                          </a-menu-item>
                          <a-menu-item v-if="data.izEnabled == '0'">
                            <a href="javascript:;" @click="handleQyty(data,'1')">停用</a>
                          </a-menu-item>
                          <a-menu-item v-if="(data.levle	 == '2' || data.levle	 == '3') && data.parentIzEnabled == 0  && data.izEnabled == '0'">
                            <a href="javascript:;" @click="handleQianyi(data)">迁移</a>
                          </a-menu-item>
                          
                          <a-menu-item v-if="(data.levle	 == '2' || data.levle	 == '3') && data.parentIzEnabled == 1  && data.izEnabled == '1'">
                            <span>暂无操作</span>
                          </a-menu-item>
                        </a-menu>
                      </template>
                    </a-dropdown>
                  </span>
                </div>
              </template>
            </a-tree>
          </div>
        </div>
        <div style="width:calc(100% - 300px);float: left;padding-left:10px;">
          <!--引用表格-->
          <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>

    
    <ConfigMaterialCategoryModal ref="registerDrawer" @success="handleSuccess"></ConfigMaterialCategoryModal>
    <ConfigMaterialTypeModal ref="registerTypeDrawer" @success="handleSuccess"></ConfigMaterialTypeModal>
    <ConfigMaterialMedicationModal ref="registerMedicationDrawer" @success="handleSuccess"></ConfigMaterialMedicationModal>
    <QianyiModal ref="qianyiDrawer" @success="handleSuccess"></QianyiModal>
    <WlqianyiModal ref="wlqianyiDrawer" @success="handleSuccess"></WlqianyiModal>
  </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';

  import ConfigMaterialCategoryModal from '/@/views/invoicing/ConfigMaterial/components/ConfigMaterialCategoryModal.vue';
  import ConfigMaterialTypeModal from '/@/views/invoicing/ConfigMaterial/components/ConfigMaterialTypeModal.vue';
  import ConfigMaterialMedicationModal from '/@/views/invoicing/ConfigMaterial/components/ConfigMaterialMedicationModal.vue';
  import QianyiModal from '/@/views/invoicing/ConfigMaterial/components/QianyiModal.vue';
  import WlqianyiModal from '/@/views/invoicing/ConfigMaterial/components/WlqianyiModal.vue';
  

  const formRef = ref();
  const queryParam = reactive<any>({});
  const treeParam = reactive<any>({izEnabled:'0'});
  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);


  const registerDrawer = ref();
  const registerTypeDrawer = ref();
  const registerMedicationDrawer = ref();
  const qianyiDrawer = ref();
  const wlqianyiDrawer = ref();

  /**
   * 点击菜单
   * @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: {
      api: list,
      columns,
      canResize:false,
      useSearchForm: false,
      showIndexColumn: true,
      showTableSetting: false,
      actionColumn: {
        width: 200,
        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 }) {
    queryParam.treeId =key;
    reload();
  }

  //迁移
  function handleQianyi(record){
    console.log("🚀 ~ handleQianyi ~ data:", record)
    record.id = record.key
    if(record.children.length > 0){
      record.sfyxj = "1"
    }else{
      record.sfyxj = "0"
    }
      console.log("🚀 ~ handleQianyi ~ record:", record)
    qianyiDrawer.value.disableSubmit = false;
    qianyiDrawer.value.edit(record);

  }

  /**
   * 新增事件
   */
  function handleAdd(data) {
    const record = {categoryId:'',typeId:'',medicationId:''}
    var levle = parseInt(data.levle)
    if(levle == 1){
      record.categoryId = data.key
      record.typeId = ''
      record.medicationId = ''
    }else if(levle == 2){
      record.categoryId = data.categoryId
      record.typeId = data.key
      record.medicationId = ''
    }else if(levle == 3){
      record.categoryId = data.categoryId
      record.typeId = data.typeId
      record.medicationId = data.key
    }
    registerModal.value.disableSubmit = false;
    registerModal.value.add(record);
  }
  
  /**
   * 编辑事件
   */
  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() {
    getTreeData();
    searchQuery();
  }
   
  /**
   * 操作栏
   */
  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'
      // }
      {
        label: '启用',
        onClick: handleWlQyty.bind(null, record),
        ifShow: record.izEnabled == 1
      }, 
      {
        label: '停用',
        onClick: handleWlQyty.bind(null, record),
        ifShow: record.izEnabled == 0
      }, 
      {
        label: '迁移',
        onClick: handleWlqianyi.bind(null, record),
      }, 

    ];
  }
  function handleWlqianyi(record: Recordable) {
    wlqianyiDrawer.value.disableSubmit = false;
    wlqianyiDrawer.value.edit(record);
  }

//物料的启用停用
  function handleWlQyty(record){
    console.log("🚀 ~ handleWlQyty ~ record:", record)
    const izEnabled = record.izEnabled == '1' ? '0' : "1"
    var params = {id:record.id,izEnabled}
    defHttp.post({ url: '/invoicing/configMaterialInfo/edit', params }).then((res) => { 
      searchQuery()
    });
  }
   
   //点击树节点查询右侧列表数据
   function handleSearch(data){
    var levle = parseInt(data.levle)
    if(levle == 1){
      queryParam.categoryId = data.key
      queryParam.typeId = ''
      queryParam.medicationId = ''
    }else if(levle == 2){
      queryParam.categoryId = data.categoryId
      queryParam.typeId = data.key
      queryParam.medicationId = ''
    }else if(levle == 3){
      queryParam.categoryId = data.categoryId
      queryParam.typeId = data.typeId
      queryParam.medicationId = data.key
    }
    reload();
 }
//添加本级（只添加一级分类）
  function handleAddbj(data){ 
    var params = {}
    registerDrawer.value.disableSubmit = false;
    registerDrawer.value.add(params);
  }
  //添加下级
  function handleAddxj(data){ 
    var levle = parseInt(data.levle)+1;
    var params = {levle,categoryId:data.categoryId,typeId:data.typeId}
    if(data.levle == 1){
      registerTypeDrawer.value.disableSubmit = false;
      registerTypeDrawer.value.add(params);
    }else if(data.levle == 2){
      registerMedicationDrawer.value.disableSubmit = false;
      registerMedicationDrawer.value.add(params);
    }
  }  
  //编辑
  function handleFenleiEdit(data){ 
    console.log("🚀 ~ handleEdit ~ data:", data)
    const params = {id:data.key,categoryId:data.categoryId,typeId:data.typeId,}
    if(data.levle == 1){
      params.categoryName = data.title
      registerDrawer.value.disableSubmit = false;
      registerDrawer.value.edit(params);
    }else if(data.levle == 2){
      params.typeName = data.title
      console.log("🚀 ~ handleEdit ~ params:", params)
      registerTypeDrawer.value.disableSubmit = false;
      registerTypeDrawer.value.edit(params);
    }else if(data.levle == 3){
      params.medicationName = data.title
      console.log("🚀 ~ handleEdit ~ params:", params)
      registerMedicationDrawer.value.disableSubmit = false;
      registerMedicationDrawer.value.edit(params);
    }
  }
  //启用停用
  function handleQyty(data,type){
    console.log("🚀 ~ handleQyty ~ data:", data)
    var levle = data.levle;
    var params = {id:data.key,izEnabled:type}
    var url = "";
    //一级分类
    if(levle == 1){
      url = "/invoicing/configMaterialCategory/editQyty";
    //二级分类
    }else if(levle == 2){
      url = "/invoicing/configMaterialType/editQyty";
    //三级分类
    }else if(levle == 3){
      url = "/invoicing/configMaterialMedication/editQyty";
    }else{
      return;
    }
    defHttp.post({url:url,params}).then(res =>{
      console.log("🚀 ~ defHttp.post ~ res:", res)
      reload();
      getTreeData();
    })

  }


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

function getTreeData(){
  const params = {izEnabled:treeParam.izEnabled}
  defHttp.get({url:'/invoicing/configMaterialCategory/getMaterialTreeData',params}).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;
      // }
    })
}
    
  // 自动请求并暴露内部方法
  onMounted(() => {
    getTreeData()
  });


</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>