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