index.vue 10.7 KB
<template>
  <div className="approve-page px-4 bg-white">
    <a-tabs :default-active-key="role === ROLE.FINANCE ? '7' : '1'" v-model:activeKey="currentKey">
      <a-tab-pane key="1" tab="字段待审核" v-if="role !== ROLE.FINANCE">
        <FieldPanel />
      </a-tab-pane>
      <a-tab-pane key="3" tab="利润分析待审核" v-if="role==ROLE.ADMIN || role==ROLE.BUSINESS" >
        <ProfitPanel />
      </a-tab-pane>
      <a-tab-pane key="5" tab="项目报告书待审核" v-if="role==ROLE.ADMIN || role==ROLE.BUSINESS">
        <ReportPanel />
      </a-tab-pane>
      <a-tab-pane
        key="7"
        tab="应收款待审核"
        v-if="
          role == ROLE.FINANCE ||
          role == ROLE.ADMIN 
          ||
          role == ROLE.BUSINESS ||
          role == ROLE.TRACKER
        "
      >
        <ReceivePanel />
      </a-tab-pane>
      <a-tab-pane
        key="9"
        tab="应付款待审核"
        v-if="
          role == ROLE.FINANCE ||
          role == ROLE.ADMIN ||
          role == ROLE.BUSINESS ||
          role == ROLE.TRACKER
        "
      >
        <PayPanel />
      </a-tab-pane>
      <a-tab-pane
        key="11"
        tab="利润分析表字段审核"
        v-if="role == ROLE.FINANCE || role == ROLE.ADMIN"
      >
        <ProfitFieldPanel />
      </a-tab-pane>
      <a-tab-pane key="13" tab="明细表字段审核" v-if="role == ROLE.FINANCE || role == ROLE.ADMIN">
        <ProduceFieldPanel />
      </a-tab-pane>

      <a-tab-pane
        key="15-16"
        tab="考勤工资字段待审核"
        v-if="role === ROLE.FINANCE || role === ROLE.ADMIN"
      >
        <a-space direction="vertical" style="width: 100%">
          <a-row :gutter="16" align="middle">
            <a-col :span="4">
              <a-select v-model:value="fieldType" style="width: 100%">
                <a-select-option value="attendance">考勤字段审核</a-select-option>
                <a-select-option value="salary">工资字段审核</a-select-option>
              </a-select>
            </a-col>
            <a-col :span="4">
              <a-date-picker
                v-model:value="selectedDate"
                picker="month"
                placeholder="请选择年月"
                format="YYYY-MM"
                style="width: 100%"
              />
            </a-col>
            <a-col :span="4">
              <a-button type="primary" @click="handleSearch">
                查询
              </a-button>
              <a-button style="margin-left: 8px" @click="handleReset">
                重置
              </a-button>
            </a-col>
          </a-row>

          <template v-if="fieldType === 'attendance'">
            <AttendancePanel :selectedDate="selectedDate" :key="attendanceKey" />
          </template>
          <template v-else-if="fieldType === 'salary'">
            <SalaryPanel :selectedDate="selectedDate" :key="salaryKey" />
          </template>
        </a-space>
      </a-tab-pane>

      <a-tab-pane
        key="19"
        tab="员工档案字段待审核"
        v-if="role === ROLE.FINANCE || role === ROLE.ADMIN"
      >
        <EmployeeFieldPanel />
      </a-tab-pane>


      <a-tab-pane key="2" tab="字段已审核" v-if="role !== ROLE.FINANCE">
        <FieldPanel isApproved />
      </a-tab-pane>
      <a-tab-pane key="4" tab="利润分析已审核" v-if="role==ROLE.ADMIN || role==ROLE.BUSINESS">
        <ProfitPanel isApproved />
      </a-tab-pane>
      <a-tab-pane key="6" tab="项目报告书已审核" v-if="role==ROLE.ADMIN || role==ROLE.BUSINESS">
        <ReportPanel isApproved />
      </a-tab-pane>
      <a-tab-pane
        key="8"
        tab="应收款已审核"
        v-if="
          role == ROLE.FINANCE ||
          role == ROLE.ADMIN 
          ||
          role == ROLE.BUSINESS ||
          role == ROLE.TRACKER
        "
      >
        <ReceivePanel isApproved />
      </a-tab-pane>
      <a-tab-pane
        key="10"
        tab="应付款已审核"
        v-if="
          role == ROLE.FINANCE ||
          role == ROLE.ADMIN ||
          role == ROLE.BUSINESS ||
          role == ROLE.TRACKER
        "
      >
        <PayPanel isApproved />
      </a-tab-pane>
      <a-tab-pane
        key="12"
        tab="利润分析表字段已审核"
        v-if="role == ROLE.FINANCE || role == ROLE.ADMIN"
      >
        <ProfitFieldPanel isApproved />
      </a-tab-pane>
      <a-tab-pane key="14" tab="明细表字段审核" v-if="role == ROLE.FINANCE || role == ROLE.ADMIN">
        <ProduceFieldPanel isApproved />
      </a-tab-pane>
      <a-tab-pane
        key="17-18"
        tab="考勤工资字段已审核"
        v-if="role === ROLE.FINANCE || role === ROLE.ADMIN"
      >
        <a-space direction="vertical" style="width: 100%">
          <a-row :gutter="16" align="middle">
            <a-col :span="4">
              <a-select v-model:value="approvedFieldType" style="width: 100%">
                <a-select-option value="attendance">考勤字段已审核</a-select-option>
                <a-select-option value="salary">工资字段已审核</a-select-option>
              </a-select>
            </a-col>
            <a-col :span="4">
              <a-date-picker
                v-model:value="approvedSelectedDate"
                picker="month"
                placeholder="请选择年月"
                format="YYYY-MM"
                style="width: 100%"
              />
            </a-col>
            <a-col :span="4">
              <a-button type="primary" @click="handleApprovedSearch">
                查询
              </a-button>
              <a-button style="margin-left: 8px" @click="handleApprovedReset">
                重置
              </a-button>
            </a-col>
          </a-row>

          <template v-if="approvedFieldType === 'attendance'">
            <AttendanceApprovedPanel :selectedDate="approvedSelectedDate" :key="attendanceApprovedKey" />
          </template>
          <template v-else-if="approvedFieldType === 'salary'">
            <SalaryApprovedPanel :selectedDate="approvedSelectedDate" :key="salaryApprovedKey" />
          </template>
        </a-space>
      </a-tab-pane>

      <a-tab-pane
        key="20"
        tab="员工档案字段已审核"
        v-if="role === ROLE.FINANCE || role === ROLE.ADMIN"
      >
        <EmployeeFieldApprovedPanel />
      </a-tab-pane>

    </a-tabs>
  </div>
</template>
<script lang="ts">
  import { computed, defineComponent, onMounted, ref, watchEffect } from 'vue';
  import { Tabs } from 'ant-design-vue';
  import { ROLE } from '../order/type.d';
  import ReportPanel from './ReportPanel.vue';
  import ProfitPanel from './ProfitPanel.vue';
  import FieldPanel from './FieldPanel.vue';
  import ReceivePanel from './ReceivePanel.vue';
  import PayPanel from './PayPanel.vue';
  import ProfitFieldPanel from './ProfitFieldPanel.vue';
  import ProduceFieldPanel from './ProduceFieldPanel.vue';
  import AttendancePanel from './AttendancePanel.vue';
  import SalaryPanel from './SalaryPanel.vue';
  import AttendanceApprovedPanel from './AttendanceApprovedPanel.vue';
  import SalaryApprovedPanel from './SalaryApprovedPanel.vue';
  import EmployeeFieldPanel from './EmployeeFieldPanel.vue';
  import EmployeeFieldApprovedPanel from './EmployeeFieldApprovedPanel.vue';
  import { useOrderStoreWithOut } from '/@/store/modules/order';
  import { useUserStoreWithOut } from '/@/store/modules/user';
  import dayjs from 'dayjs';
  const orderStore = useOrderStoreWithOut();
  const userStore = useUserStoreWithOut();
  const user = userStore.getUserInfo;
  const role = computed(() => {
    return user?.roleSmallVO?.code;
  });

  export default defineComponent({
    components: {
      [Tabs.name]: Tabs,
      [Tabs.TabPane.name]: Tabs.TabPane,
      ReportPanel,
      FieldPanel,
      ProfitPanel,
      ReceivePanel,
      PayPanel,
      ProfitFieldPanel,
      ProduceFieldPanel,
      AttendancePanel,
      SalaryPanel,
      AttendanceApprovedPanel,
      SalaryApprovedPanel,
      EmployeeFieldPanel,
      EmployeeFieldApprovedPanel,
    },
    setup() {
      const checkedKeys = ref<Array<string | number>>([]);
      const currentKey = ref('1');
      const fieldType = ref('attendance'); // 默认显示考勤字段审核
      const selectedDate = ref(null);
      const attendanceKey = ref(0);
      const salaryKey = ref(0);
      const approvedFieldType = ref('attendance'); // 默认显示考勤字段已审核
      const approvedSelectedDate = ref(null);
      const attendanceApprovedKey = ref(0);
      const salaryApprovedKey = ref(0);

      onMounted(async () => {
        await orderStore.getDict();
      });
      watchEffect(() => {
        if (role.value == ROLE.FINANCE) {
          currentKey.value = '7';
        }
      });

      const handleSearch = () => {
        // 通过更新key来强制子组件重新渲染,从而触发数据重新加载
        if (fieldType.value === 'attendance') {
          attendanceKey.value += 1;
        } else if (fieldType.value === 'salary') {
          salaryKey.value += 1;
        }
      };

      const handleReset = () => {
        selectedDate.value = null;
        // 通过更新key来强制子组件重新渲染
        if (fieldType.value === 'attendance') {
          attendanceKey.value += 1;
        } else if (fieldType.value === 'salary') {
          salaryKey.value += 1;
        }
      };

      const handleApprovedSearch = () => {
        // 通过更新key来强制子组件重新渲染,从而触发数据重新加载
        if (approvedFieldType.value === 'attendance') {
          attendanceApprovedKey.value += 1;
        } else if (approvedFieldType.value === 'salary') {
          salaryApprovedKey.value += 1;
        }
      };

      const handleApprovedReset = () => {
        approvedSelectedDate.value = null;
        // 通过更新key来强制子组件重新渲染
        if (approvedFieldType.value === 'attendance') {
          attendanceApprovedKey.value += 1;
        } else if (approvedFieldType.value === 'salary') {
          salaryApprovedKey.value += 1;
        }
      };
      return {
        checkedKeys,
        currentKey,
        fieldType,
        role,
        ROLE,
        selectedDate,
        attendanceKey,
        salaryKey,
        approvedFieldType,
        approvedSelectedDate,
        attendanceApprovedKey,
        salaryApprovedKey,
        handleSearch,
        handleReset,
        handleApprovedSearch,
        handleApprovedReset,
      };
    },
  });
</script>

<style>
  .approve-page .vben-basic-table .ant-table-wrapper {
    margin-bottom: 0;
  }

  .approve-page .vben-basic-table-form-container {
    padding-right: 0;
    padding-left: 0;
  }

  .approve-page .vben-basic-table-form-container .ant-form {
    margin-bottom: 0;
    padding-top: 0;
  }
</style>