ExportModal.vue 7.15 KB
<template>
  <BasicModal
    v-bind="$attrs"
    destroyOnClose
    @register="register"
    title="导出"
    width="500px"
    :height="100"
    wrapClassName="h-[260px]"
    @visible-change="handleShow"
    :footer="null"
  >
    <CheckboxGroup v-model:value="checkedList" :options="options" />
    <div className="mt-6">
      <a-button type="primary" @click="handleExport" className="ml-4" :loading="exportLoading"
        >导出</a-button
      >
    </div>
  </BasicModal>
</template>
<script lang="ts">
  import { defineComponent, ref, computed } from 'vue';
  import { BasicModal, useModalInner } from '/@/components/Modal';
  import { orderExport } from '/@/api/project/order';
  import { ROLE } from './type.d';
  import { CheckboxGroup } from 'ant-design-vue';
  import { useOrderStoreWithOut } from '/@/store/modules/order';
  import { useOrderInfo } from '/@/hooks/component/order';
  import { merge } from 'lodash-es';
  import {
    ORDER_LIST_BASE_FIELDS,
    ORDER_LIST_REPORT_FIELDS,
    ORDER_LIST_PROFIT_FIELDS,
    ORDER_LIST_INSPECT_FIELDS,
    ORDER_LIST_TRACK_FIELDS,
  } from './tableData';

  export default defineComponent({
    components: { BasicModal, CheckboxGroup },
    props: {
      role: {
        type: String,
      },
      ids: {
        type: Array<string | number>,
      },
    },
    setup(props) {
      const orderStore = useOrderStoreWithOut();
      const { manualPreform, exchangeRate } = useOrderInfo(orderStore);
      const checkedList = ref([
        // 'baseFields',
        // 'reportFields',
        // 'profitAnalysisFields',
        // 'trackStageFields',
        // 'inspectionStageFields',
      ]);
      const loading = ref(true);
      const exportLoading = ref(false);
      const activeUser = ref();
      const info = ref();
      const searchData = ref({});
      const [register, { setModalProps, closeModal }] = useModalInner(async (data) => {
        searchData.value = data.data || {};
        activeUser.value = undefined;
        info.value = '';
      });

      const options = computed(() => {
        // 运营总监-基本信息,跟单,质检
        if (props.role === ROLE.DATA_REPORT_USER) {
          return [
            { label: '基本信息', value: 'baseFields' },
            { label: '跟单信息', value: 'trackStageFields' },
            { label: '质检信息', value: 'inspectionStageFields' },
          ];
        }
        if (props.role === ROLE.BUSINESS) {
          return [
            { label: '基本信息', value: 'baseFields' },
            { label: '项目报告', value: 'reportFields' },
            { label: '利润分析', value: 'profitAnalysisFields' },
            { label: '跟单信息', value: 'trackStageFields' },
            { label: '质检信息', value: 'inspectionStageFields' },
          ];
        }
        if (props.role === ROLE.FINANCE) {
          return [
            { label: '基本信息', value: 'baseFields' },
            { label: '项目报告', value: 'reportFields' },
            { label: '利润分析', value: 'profitAnalysisFields' },
            { label: '跟单信息', value: 'trackStageFields' },
            { label: '质检信息', value: 'inspectionStageFields' },
          ];
        }
        if (props.role === ROLE.TRACKER) {
          return [
            { label: '基本信息', value: 'baseFields' },
            { label: '利润分析', value: 'profitAnalysisFields' },
            { label: '跟单信息', value: 'trackStageFields' },
            { label: '质检信息', value: 'inspectionStageFields' },
          ];
        }

        if (props.role === ROLE.ADMIN) {
          return [
            { label: '基本信息', value: 'baseFields' },
            { label: '项目报告', value: 'reportFields' },
            { label: '利润分析', value: 'profitAnalysisFields' },
            { label: '跟单信息', value: 'trackStageFields' },
            { label: '质检信息', value: 'inspectionStageFields' },
          ];
        }

        if (props.role === ROLE.INSPECT) {
          return [
            { label: '基本信息', value: 'baseFields' },
            { label: '质检信息', value: 'inspectionStageFields' },
          ];
        }

        return [
          { label: '基本信息', value: 'baseFields' },
          { label: '质检信息', value: 'inspectionStageFields' },
        ];
      });

      function handleShow(visible: boolean) {
        if (visible) {
          loading.value = true;
          setModalProps({ loading: false, confirmLoading: false });
        }
      }

      async function handleExport() {
        const fieldVO: any = {};
        checkedList.value.forEach((item) => {
          if (item === 'baseFields') {
            fieldVO.baseFields = ORDER_LIST_BASE_FIELDS.map((item) => ({
              [item.dataIndex]: 'selected',
            }));
            fieldVO.baseFields = merge({}, ...fieldVO.baseFields);
            if (props.role === ROLE.PRODUCE) {
              // 从 baseFields 中去除 orderHod
              delete fieldVO.baseFields['orderHodTime'];
            }
          } else if (item === 'reportFields') {
            fieldVO.reportFields = ORDER_LIST_REPORT_FIELDS[0].children.map((item) => ({
              [item.dataIndex]: 'selected',
            }));
            fieldVO.reportFields = merge({}, ...fieldVO.reportFields);
          } else if (item === 'profitAnalysisFields') {
            if (props.role === ROLE.TRACKER) {
              fieldVO.profitAnalysisFields = ORDER_LIST_PROFIT_FIELDS[0].children
                .filter((k) =>
                  [
                    'customerPrice',
                    'productionDepartmentPrice',
                    'productionDepartmentTotalPrice',
                  ].includes(k.dataIndex),
                )
                .map((item) => ({
                  [item.dataIndex]: 'selected',
                }));
            } else {
              fieldVO.profitAnalysisFields = ORDER_LIST_PROFIT_FIELDS[0].children.map((item) => ({
                [item.dataIndex]: 'selected',
              }));
            }
            fieldVO.profitAnalysisFields = merge({}, ...fieldVO.profitAnalysisFields);
          } else if (item === 'trackStageFields') {
            fieldVO.trackStageFields = ORDER_LIST_TRACK_FIELDS[0].children.map((item) => ({
              [item.dataIndex]: 'selected',
            }));
            fieldVO.trackStageFields = merge({}, ...fieldVO.trackStageFields);
          } else if (item === 'inspectionStageFields') {
            fieldVO.inspectionStageFields = ORDER_LIST_INSPECT_FIELDS[0].children.map((item) => ({
              [item.dataIndex]: 'selected',
            }));
            fieldVO.inspectionStageFields = merge({}, ...fieldVO.inspectionStageFields);
          }
        });

        //导出选中的订单
        fieldVO.orderIds = props.ids;
        exportLoading.value = true;
        await orderExport({ ...searchData.value, fieldVO });
        exportLoading.value = false;

        closeModal();
      }
      return {
        register,
        options,
        loading,
        handleShow,
        info,
        manualPreform,
        handleExport,
        activeUser,
        exchangeRate,
        checkedList,
        exportLoading,
      };
    },
  });
</script>