<template>
  <div class="h5-container">
    <van-nav-bar title="学习课程管理">

      <template #right>
        <van-icon
          name="add"
          size="24"
          color="var(--van-nav-bar-icon-color)"
          @click="handAdd"
        />
        <van-popover
          v-model:show="showPopover"
          :actions="actions"
          placement="bottom-end"
          @select="onSelect"
        >
          <template #reference>
            <van-icon name="filter-o" size="24px" />
          </template>
        </van-popover>
      </template>
    </van-nav-bar>

    <van-search v-model="query.name" show-action placeholder="请输入学习任务名称" @search="onRefresh"
                @cancel="handdelect" />
    <!-- 项目列表 -->
    <van-pull-refresh v-model="isRefreshing" success-text="刷新成功" @refresh="onRefresh">
      <van-list v-model:loading="isLoading" :finished="isFinished" finished-text="没有更多了" offset="200" @load="onLoad">
        <div v-for="(item, idx) in resultData" :key="item.id">
          <van-swipe-cell title-style="color: #007aff" style="height: 80px;" :ref="el => getSwipeCellRef(el, idx)">
            <template #default>
              <div class="swipe-cell-default">
                <van-cell style="height: 100%; display: flex; align-items: center;">
                  <template #title>
                    <div class="cell-title">
                      {{ item.projectName }}
                    </div>
                  </template>
                  <template #label>
                    <div> 培训学时：{{item.trainHours}}  ||培训类别：{{ getProjectTypeName(item.projectType)}}</div>
                    <div style="width: 112px" :class="getStatusClass(item.statusFlag)">
                      状态：
                      <span v-if="item.statusFlag === '1'" style="width: 200px">已完成</span>
                      <span v-else-if="item.statusFlag != '1'" style="width: 200px">未完成</span>
                      <span v-else>未知</span>
                    </div>
                  </template>
                </van-cell>
                <div class="swipe-cell-default-icon">
                  <van-icon v-if="openStatus[idx]" name="arrow-double-left" @click.stop="openSwipe(idx)" />
                  <van-icon v-else name="arrow-double-right" @click.stop="closeSwipe(idx)" />
                </div>
              </div>
            </template>

            <template #right>

              <div style="display: flex; align-items: center; justify-content: flex-end; height: 100%;">
                <van-button v-if="isAfter(item.toDate)" class="red-rounded-box-wide" text="已结束"/>
                <van-button v-else-if="isBefore(item.fromDate)" class="red-rounded-box-wide" text="未开始"/>
                <van-button v-else class="submit-button"  @click="goaddPeo(item)"  text="进入小节"/>
              </div>

            </template>
          </van-swipe-cell>
        </div>

      </van-list>
    </van-pull-refresh>

    <!-- 删除确认弹窗 -->
    <van-dialog v-model:show="deleteDialogVisible" show-cancel-button @confirm="confirmDelete">
      <template #title>
        <div>删除确认</div>
      </template>
      <div style="padding: 30px;">确定要删除该项目吗？</div>
    </van-dialog>

  </div>
</template>

<script setup>
import { ref, reactive, onMounted, getCurrentInstance, nextTick, toRaw } from 'vue';
import { Dialog, showDialog, showSuccessToast, showToast, Toast } from 'vant';

const { proxy } = getCurrentInstance();

// 将字符串转为 Date 对象进行比较
const parseDate = (str) => {
  if (!str) return null;
  // 支持 "YYYY-MM-DD HH:mm:ss" 或 ISO 格式
  return new Date(str);
};

// 当前时间是否在 fromDate 之前（未开始）
const isBefore = (fromDateStr) => {
  const now = new Date();
  const fromDate = parseDate(fromDateStr);
  return fromDate && now < fromDate;
};

// 当前时间是否在 toDate 之后（已结束）
const isAfter = (dateStr) => {
  if (!dateStr) return false;

  const now = new Date();
  const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); // 今天 00:00:00

  const [y, m, d] = dateStr.split('-').map(Number);
  const deadline = new Date(y, m - 1, d); // 截止日 00:00:00

  return today > deadline;
};

const getProjectTypeName = (code) => {
  const map = {
    'Gbm': '安全管理',
    'Jja': '生产安全技术',
    'Jjb': '消防安全技术',
    'Jjc': '安全保卫技术',
    'Jjd': '特种作业安全技术',

  };
  return map[code] || '未知类型';
}
const onClickLeft = () => {
  history.back();
};
const headers = ref({
  token: localStorage.getItem('token'),
  userId: localStorage.getItem('userId'),
  dept: JSON.parse(localStorage.getItem('dept'))[0].deptCode
});
const switchIconState = (idx) => {
  openStatus.value[idx] = !openStatus.value[idx]
  openStatus.value = new Array(resultData.value.length).fill(true);
}

// const onClickRight = () =>{
//   searchShow.value = !searchShow.value;
// }

const searchShow = ref(false);

/**
 时间
 */
// 当前年份
const currentYear = new Date().getFullYear();

// 生成年份：往前3年，往后1年 → 共5年
const yearRange = Array.from({ length: 5 }, (_, i) => currentYear - 3 + i);

// 构造 actions（符合 van-popover 要求）
const actions = yearRange.map(year => ({
  text: `${year}年`
}));

// 默认选中的年份（用于请求）
const selectedYear = ref(currentYear);

// 控制 popover 显示（可选，你用了 v-model:show 就够了）
const showPopover = ref(false);

// 选择回调
const onSelect = (action, index) => {
  query.value.year = yearRange[index];
  // 👇 触发刷新（带上 selectedYear）
  console.log(selectedYear.value);
  resetAndRefresh();
};
const query = ref({
  year: currentYear, // ← 默认就是今年
  name: '',
});

// 重置并刷新（你已有类似逻辑）
const resetAndRefresh = () => {
  isFinished.value = false;
  isLoading.value = false;

  resultData.value = [];
  onRefresh();
};

function formatDate(date, format) {
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const hours = date.getHours();
  const minutes = date.getMinutes();
  const seconds = date.getSeconds();

  return format
    .replace('yyyy', year)
    .replace('MM', month.toString().padStart(2, '0'))
    .replace('dd', day.toString().padStart(2, '0'))
    .replace('HH', hours.toString().padStart(2, '0'))
    .replace('mm', minutes.toString().padStart(2, '0'))
    .replace('ss', seconds.toString().padStart(2, '0'));
}

const tableData = ref([]);
const selectedRows = ref([]);
const dialogVisibleLook = ref(false);
const deleteDialogVisible = ref(false);
const currentDeleteItem = ref([]);
const dialogVisible = ref(false);
const dialogVisibleFile = ref(false);
const date = ref(null);

const kz = ref(true);
import { useRouter } from 'vue-router';
const router = useRouter();
const handAdd =  () => {

  router.push({ path: "/checkList",
    query: {
      mark:-1
    } });

};
const goaddPeo = (item) => {
  router.push({
    path: '/sectionList',
    query: {
      data: JSON.stringify(item)
    }
  })
}

const edits = (row) => {
  kz.value = true;
  form.value = { ...row };
  router.push({ path: "/checkList",
    query: {
      mark:1,
      data:JSON.stringify(form.value)
    } });
};
// 定义表单数据
const form = ref({
  hdPicId: '',
  hdId: '',
  hdType: '',
  discoveryTime: '',
  hdSubtype: '',
  discoverer: '',
  discovererOther: '',
  hdDescription: '',
  hdLevel: '',
  bz: '',
  hdLocation: '',
  picBefore: '',

  equipmentId: '',
  hdmanageLevel: '',
  handlingProcesses: '',
  companyId: '',
  repairLeader: '',
  repairOther: '',
  repairSuggest: '',
  repairDdl: '',
  repairDept: '',
  acceptLeader: '',
  acceptOther: '',
  picAfter: '',
  picTemp: '',
  repairDescription: '',
  discovererDept: '',
  discovererDeptCode: '',
  hdLocationCode: '',
  hdLocationName: '',

  status: '',


  hdSelect: '正常登记',
  id: ''
});
const resetForma = () => {
  form.value = {
    hdPicId: '',
    hdId: '',
    hdType: '',
    discoveryTime: '',
    hdSubtype: '',
    discoverer: '',
    discovererOther: '',
    hdDescription: '',
    hdLevel: '',
    bz: '',
    hdLocation: '',
    picBefore: '',

    equipmentId: '',
    hdmanageLevel: '',
    handlingProcesses: '',
    companyId: '',
    repairLeader: '',
    repairOther: '',
    repairSuggest: '',
    repairDdl: '',
    repairDept: '',
    acceptLeader: '',
    acceptOther: '',
    picAfter: '',
    picTemp: '',
    repairDescription: '',
    status: '',
    discovererDept: '',
    discovererDeptCode: '',
    hdLocationCode: '',
    hdLocationName: '',

    hdSelect: '正常登记',
    id: ''
  };
};

const isRefreshing = ref(false);
const isLoading = ref(false);
const isFinished = ref(false);
const currentPage = ref(1);
const pageSize = ref(10);
const totalRows = ref(0);
const resultData = ref([]);

const dept=localStorage.getItem("dept")[0].deptCode;
const getTableData = async () => {
  query.value.addDeptCode=dept
  const url = 'sgsafe/Class/queryClassUserSignboard';
  const param = {
    page: currentPage.value,
    rows: pageSize.value,
    params: JSON.stringify(query.value)
  };
  const response = await proxy.$axios.get(url, param);
  if (response.data.code === 0) {
    tableData.value = response.data.data.records;
    totalRows.value = response.data.data.total;
  } else {
    showToast({
      type: 'error',
      message: '操作失败！' + response.data.msg
    });
  }
};
const ruleIds = ref([]);
const getRuleId = () => {
  var url = '/sgsafe/ExamHead/getCheckRuleId'
  var param = {}
  proxy.$axios.get(url, param).then(response => {
    if (response.data.code == '0') {
      ruleIds.value = response.data.data
    } else {
      console.log("1111111");
    }
  })
  console.log('ruleIds', ruleIds)
}

const onRefresh = () => {
  basicReset();
  onLoad();
};

const onLoad = async () => {
  if (isRefreshing.value) {
    resultData.value = [];
    currentPage.value = 1;
    isRefreshing.value = false;
  }
  try {
    await getTableData();
    await getRuleId()
    if (pageSize.value * currentPage.value < totalRows.value) {
      resultData.value = [...resultData.value, ...tableData.value];
      openStatus.value = new Array(resultData.value.length).fill(true);
      currentPage.value++;

    } else {
      resultData.value = [...resultData.value, ...tableData.value];
      openStatus.value = new Array(resultData.value.length).fill(true);
      isFinished.value = true;
    }
  } catch (error) {
    console.log(error);
    isFinished.value = true;
  } finally {
    isLoading.value = false;
  }
};
/* 通用方法： 重置list数据 */
const basicReset = () => {
  isFinished.value = false;
  isLoading.value = true;
  currentPage.value = 1;
  resultData.value = [];
};

/*onMounted(() => {
  handleSearch();
});

const handleSearch = () => {
/!*  currentPage.value = 1;
  isFinished.value = false;
  tableData.value = [];*!/
  basicReset()
  onLoad()
};*/

const handdelect = () => {
  query.value.checkName = '';
  onRefresh()
};

const handleDetailLook = (row) => {
  form.value = { ...row };
  proxy.$router.push({
    name: 'taiZhang_detail',
    query: {
      form: form.value.id
    }
  });
  // dialogVisibleLook.value = true;
};
const deleteData=ref({})

const handleDelete = (item) => {
  deleteData.value=item
  deleteData.value.cancelFlag='1'
  var url = '/sgsafe/EduCheckMaster/save';
  var param = {
    json: JSON.stringify(item)
  };
  proxy.$axios.post(url, param).then(response => {
    if (response.data.code == '0') {
      showSuccessToast("删除成功")
      onRefresh();

    } else {
    }

  })
};


const confirmDelete = () => {
  for (let item of currentDeleteItem.value) {
    if (item.addId !== headers.value.userId) {
      showToast({
        type: 'warning',
        message: '只能删除自己添加的数据！'
      });
      return;
    }
  }

  if (currentDeleteItem.value[0].status !== '0' && currentDeleteItem.value[0].hdSelect !== '下发隐患'
    && currentDeleteItem.value[0].hdSelect !== '即查即改') {
    showToast({
      type: 'fail',
      message: '只有尚未提交流程的记录或回到起点的流程经过作废后才可以删除！'
    });
    return;
  }
  if (currentDeleteItem.value[0].status !== '2' && currentDeleteItem.value[0].hdSelect === '下发隐患'
    && currentDeleteItem.value[0].hdSelect !== '即查即改') {
    showToast({
      type: 'fail',
      message: '只有尚未提交流程的记录或回到起点的流程经过作废后才可以删除！'
    });
    return;
  }

  var url = 'sgsafe/Hiddendanger/remove';
  var param = {
    params: JSON.stringify({ ...currentDeleteItem.value.map(x => x.id) })
  };
  proxy.$axios.get(url, param).then(response => {
    if (response.data.code == 0) {
      showToast({
        type: 'success',
        message: '删除成功'
      });
      onRefresh();
    } else {
      showToast({
        type: 'fail',
        message: '操作失败！' + response.data.msg
      });
    }
  });
};




const resetForm = () => {
  form.value = {
    projectName: '',
    projectLeader: '',
    phone: '',
    dept: ''
  };
};

const baocun = () => {
  nextTick(() => {
    if (form.value.hdSelect === '正常登记') {
      form.value.status = '0';
    } else if (form.value.hdSelect === '下发隐患') {
      form.value.status = '2';
    } else {
      form.value.status = '-1';
    }
  });
  // 原有保存逻辑保持不变
  var url = 'sgsafe/Hiddendanger/save';
  var param = {
    json: JSON.stringify(form.value)
  };
  proxy.$axios.post(url, param).then(response => {
    if (response.data.code == '0') {
      showSuccessToast('保存成功！');
      getTableData();
      orJsons();
      // clearDeptUsers()
    } else {
      showToast({
        type: 'fail',
        message: '操作失败！' + response.data.msg
      });
    }
  });
};

//处理人员code
const repairLL = ref('');
const repairOO = ref('');
const acceptLL = ref('');
const orJsons = () => {
  // console.log('forms',form.value)
  if (form.value.hdSelect === '正常登记') {
    nextTick(() => {
      nextTick(() => {
        repairLL.value = qq('repairLL', form.value.discoverer);//隐患发现人
        nextTick(() => {
          repairOO.value = qq('repairOO', form.value.discovererOther);//其他隐患发现人
          nextTick(() => {
            acceptLL.value = qq('acceptLL', form.value.discoverer);//隐患销号人
          });
        });
      });

      // acceptOO.value = qq('acceptOO', form.value.acceptOther)
    });
  } else {
    // console.log('noiajdoifjpoewjfopjp')
    nextTick(() => {
      nextTick(() => {
        repairLL.value = qq('repairLL', form.value.acceptLeader);//隐患发现人
        nextTick(() => {
          repairOO.value = qq('repairOO', form.value.acceptOther);//其他隐患发现人
          nextTick(() => {
            acceptLL.value = qq('acceptLL', form.value.discoverer);//隐患销号人
          });
        });
      });

      // acceptOO.value = qq('acceptOO', form.value.acceptOther)
    });
  }
};

const jsons = ref({});
const qq = (a, val) => {
  let aa = '';
  var url = 'sgsafe/Hiddendanger/qqId';
  var param = {
    params: val
  };
  proxy.$axios.post(url, param).then(response => {
    if (response.data.code == 0) {

      aa = response.data.data;
      switch (a) {
        case 'repairLL':
          repairLL.value = response.data.data;
          // console.log('repairLL',repairLL.value);
          break;
        case 'repairOO':
          repairOO.value = response.data.data;
          // console.log('repairOO',repairLL.value);
          break;
        case 'acceptLL':
          acceptLL.value = response.data.data;
          // console.log('acceptLL',repairLL.value);
          break;
        default:
          break;
      }
      jsons.value = {
        hdConfirm: repairLL.value,
        hdConfirmO: repairOO.value,
        hdCancel: acceptLL.value
      };

      // 处理函数
      function processValue(value) {
        // 将逗号替换为分号
        const replacedValue = value.replace(/,/g, ';');
        // 分割值
        const parts = replacedValue.split(';');
        // 每个部分前加上 U_
        const processedParts = parts.map(part => `U_${part.trim()}`);
        // 重新组合
        return processedParts.join(';');
      }

      // 处理整个对象
      const processedData = {};
      for (const key in jsons.value) {
        if (jsons.value.hasOwnProperty(key)) {
          processedData[key] = processValue(jsons.value[key]);
        }
      }

      console.log('对象', toRaw(processedData));

      let b = {
        acceptL: processedData.hdConfirm,
        acceptO: processedData.hdConfirmO,
        id: form.value.id
      };

      if (form.value.hdSelect === '即查即改') {
        b = {
          hdFxr: processedData.hdCancel,
          id: form.value.id
        };
      }

      if (form.value.hdSelect === '正常登记') {
        b = {
          // hdConfirm: processedData.hdConfirm,
          // hdConfirmO: processedData.hdConfirmO,
          id: form.value.id
        };
      }

      const aaa = JSON.stringify(toRaw(b));
      sessionStorage.setItem('variables', aaa);
      console.log('aaa', aaa);
    } else {
      showToast({
        type: 'fail',
        message: '操作失败！' + response.data.msg
      });
    }
  });
  return aa;
};

const reback = () => {
  // 返回逻辑
};

const deleteRow = (row) => {
  selectedRows.value = [row];
  handleDelete(row);
};

const deleteRowa = (row) => {
  deleteRow(row);
};

const bm = (val) => {
  // 部门选择逻辑
};

//提交审批流程
import { workflowSubmit, workflowCancel } from '@/tools/workflow.js';

const flowId = ref('');
flowId.value = 'hazardManagementFlowId';
const handleSubmit2 = (val, idx) => {
  openStatus.value[idx] = !openStatus.value[idx]
  openStatus.value = new Array(resultData.value.length).fill(true);
  console.log('提交');
  console.log('selectedRows', selectedRows.value);
  let row = val;
  form.value = { ...row }
  form.value.workCreate = headers.value.dept;

  let b = {
    id: form.value.id,
  }
  const aaa = JSON.stringify(toRaw(b))
  sessionStorage.setItem('variables', aaa)

  if (form.value.hdSelect === '正常登记') {
    flowId.value = 'hazardManagementFlowId'
  } else if (form.value.hdSelect === '下发隐患') {
    flowId.value = 'hazardImmediatelyCM'
    form.value.status = '2'
  } else {
    flowId.value = 'hazardImmediatelyCMUpdate'
    form.value.status = '-1'
  }

  console.log('----');
  console.log(flowId.value);
  console.log(sessionStorage.getItem('variables'));
  console.log(row.workId);
  console.log(row.trackId);
  let titles = '隐患排查治理'
  showDialog({
      title: '提示',
      message: '确定提交审批？',
      showCancelButton: true,
      confirmButtonText: '确定',
      type: 'warning',
      cancelButtonText: '取消'
    }
  ).then(() => {
    return workflowSubmit(
      flowId.value,
      '隐患排查治理',
      '初始化提交',
      // JSON.stringify({}),
      sessionStorage.getItem('variables'),
      row.workId,
      row.trackId);
  }).then((result) => {
    if (result.status === 'success') {
      // 将结果返回的workId和trackId保存
      var url = 'sgsafe/Hiddendanger/saveProcessInfo';
      console.log('id', result, row.id);
      var process = {
        'id': form.value.id,
        'workId': result.workId,
        'trackId': result.trackId
      };
      var param = {
        json: JSON.stringify(process)
      };
      proxy.$axios.post(url, param).then(response => {
        if (response.data.code === 0) {
          form.value = response.data.data;
          console.log('我要进来啦保存成功');
          showToast({
            type: 'success',
            message: '提交审批成功'
          });
          onRefresh()
        }
      });
    } else {
      showToast({
        type: 'error',
        message: '提交审批失败，' + result.msg
      });
    }
  }).catch(() => {
    showToast({
      type: 'info',
      message: '已取消提交'
    });
  });
};


const getStatusClass = (status) => {
  switch (status) {
    case '1':
      return 'status-rectifying';
    default:
      return 'status-closed';
  }
};

/**
 * 按钮实现swipe-cell滑动
 */
const openStatus = ref([])
const swipeCellRefs = ref([])
const getSwipeCellRef = (el, index) => {
  if (el) {
    swipeCellRefs.value[index] = el;
  }
}
const openSwipe = (idx) => {
  openStatus.value = new Array(resultData.value.length).fill(true);
  if (idx >= 0 && idx < swipeCellRefs.value.length) {
    openStatus.value[idx] = false
    swipeCellRefs.value[idx].open('right')
  }
  document.addEventListener('click', handleDocumentClick)
}
/**
 * 当点击滑动单元格时，开始监听点击事件
 */
const handleDocumentClick = (event) => {
  openStatus.value = new Array(resultData.value.length).fill(true);
}

const closeSwipe = (idx) => {
  if (idx >= 0 && idx < swipeCellRefs.value.length) {
    openStatus.value[idx] = true
    swipeCellRefs.value[idx].close()
  }
}

</script>

<style scoped>
.h5-container {
  width: 100%;
  padding: 5px;
  box-sizing: border-box;
}

.status-pending {
  background-color: #fff3cd;
  color: #856404;
  padding: 2px 4px;
  border-radius: 4px;
}

.status-registered {
  background-color: #d1ecf1;
  color: #0c5460;
  padding: 2px 4px;
  border-radius: 4px;
}

.status-analyzing {
  background-color: #fff8e1;
  color: #ff8f00;
  padding: 2px 4px;
  border-radius: 4px;
}

.status-rectifying {
  background-color: #e8f5e9;
  color: #2e7d32;
  padding: 2px 4px;
  border-radius: 4px;
}

.status-accepting {
  background-color: #e3f2fd;
  color: #1565c0;
  padding: 2px 4px;
  border-radius: 4px;
}

.status-closed {
  background-color: #f8bbd0;
  color: #b71c1c;
  padding: 2px 4px;
  border-radius: 4px;
}

.status-finished {
  background-color: #e8eaf6;
  color: #311b92;
  padding: 2px 4px;
  border-radius: 4px;
}

.status-unknown {
  background-color: #efebe9;
  color: #424242;
  padding: 2px 4px;
  border-radius: 4px;
}

.cell-title {
  display: -webkit-box;
  /* 旧版弹性盒子模型 */
  -webkit-box-orient: vertical;
  /* 内容垂直排列 */
  -webkit-line-clamp: 2;
  /* 限制显示行数 */
  overflow: hidden;
  /* 超出隐藏 */
  text-overflow: ellipsis;
  /* 省略号 */
  line-height: 1.5;
  /* 可选：设置行高 */
  max-height: calc(1.5em * 2);
  /* 可选：根据行高限制最大高度 */
  font-size: 16px;
  font-weight: bold;
  color: #333;
  /* 字号 */
}

.swipe-cell-default {
  display: flex;
  background-color: #ffffff;
  justify-content: center;
  align-items: center;
}

.swipe-cell-default-icon {
  width: 60px;
  display: flex;
  justify-content: center;
}

.delete-button {
  height: 100%;
  border: none;
  color: #ff0000;
  background-image: url('@/assets/img/del.png');
  background-size: auto 100%;
  background-repeat: no-repeat;
}

.red-rounded-box-wide {
  width: 80px;           /* 可容纳3个字 */
  height: 36px;          /* 高度适中 */
  border: 2px solid red;
  border-radius: 18px;   /* 圆角 = 高度 / 2 → 完美胶囊形 */
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  color: #ee0631;
  background-color: transparent;
  box-sizing: border-box;
}

.submit-button {
  height: 100%;
  border: none;
  color: #07c160;
  background-image: url('@/assets/img/sub.png');
  background-size: auto 100%;
  background-repeat: no-repeat;
}

.subsuccess {
  height: 100%;
  border: none;
  color: #07c160;
  background-image: url('@/assets/img/sub1.png');
  background-size: auto 100%;
  background-repeat: no-repeat;
}
</style>
