Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions frontend/packages/lib-shared/enums/moduleEnum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,7 @@ export enum ReasonTypeEnum {
OPPORTUNITY_FAIL_RS = 'OPPORTUNITY_FAIL_RS', // 商机失败原因
CUSTOMER_POOL_RS = 'CUSTOMER_POOL_RS', // 公海原因
CLUE_POOL_RS = 'CLUE_POOL_RS', // 线索移入原因
CONTRACT_APPROVAL = 'CONTRACT_APPROVAL', // 合同审批
INVOICE_APPROVAL = 'INVOICE_APPROVAL', // 发票审批
QUOTATION_APPROVAL = 'QUOTATION_APPROVAL', // 报价审批
}
41 changes: 41 additions & 0 deletions frontend/packages/web/src/hooks/useApprovalConfig.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { FormDesignKeyEnum } from '@lib/shared/enums/formDesignEnum';
import { ReasonTypeEnum } from '@lib/shared/enums/moduleEnum';

import { getReasonConfig } from '@/api/modules';

import { FilterOption } from 'naive-ui/es/data-table/src/interface';

export type ApprovalConfigType =
| FormDesignKeyEnum.CONTRACT
| FormDesignKeyEnum.INVOICE
| FormDesignKeyEnum.OPPORTUNITY_QUOTATION;

const dicApprovalKeyMap: Record<ApprovalConfigType, ReasonTypeEnum> = {
[FormDesignKeyEnum.CONTRACT]: ReasonTypeEnum.CONTRACT_APPROVAL,
[FormDesignKeyEnum.INVOICE]: ReasonTypeEnum.INVOICE_APPROVAL,
[FormDesignKeyEnum.OPPORTUNITY_QUOTATION]: ReasonTypeEnum.QUOTATION_APPROVAL,
};

export default function useApprovalConfig(formKey: FormDesignKeyEnum) {
const reasonOptions = ref<FilterOption[]>([]);
const dicApprovalEnable = ref(false);
const dicKey = ref();
dicKey.value = dicApprovalKeyMap[formKey as keyof typeof dicApprovalKeyMap];

async function initApprovalConfig() {
if (!dicKey.value) return;
try {
const { dictList, enable } = await getReasonConfig(dicKey.value);
reasonOptions.value = dictList.map((e) => ({ label: e.name, value: e.id }));
dicApprovalEnable.value = enable;
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
}
}

return {
initApprovalConfig,
dicApprovalEnable,
};
}
79 changes: 49 additions & 30 deletions frontend/packages/web/src/hooks/useFormCreateTable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
contractStatusOptions,
} from '@/config/contract';
import { quotationStatusOptions } from '@/config/opportunity';
import useApprovalConfig from '@/hooks/useApprovalConfig';
import useFormCreateAdvanceFilter from '@/hooks/useFormCreateAdvanceFilter';
import useReasonConfig from '@/hooks/useReasonConfig';

Expand Down Expand Up @@ -77,6 +78,7 @@ export default async function useFormCreateTable(props: FormCreateTableProps) {
const { t } = useI18n();
const { getFilterListConfig, customFieldsFilterConfig } = useFormCreateAdvanceFilter();
const { reasonOptions, initReasonConfig } = useReasonConfig(props.formKey);
const { initApprovalConfig, dicApprovalEnable } = useApprovalConfig(props.formKey);
const loading = ref(false);
const showPagination = props.showPagination ?? true;
let columns: CrmDataTableColumn[] = [];
Expand Down Expand Up @@ -125,6 +127,8 @@ export default async function useFormCreateTable(props: FormCreateTableProps) {

// 静态列和高级筛选增加原因配置筛选
await initReasonConfig();
// 审批配置
await initApprovalConfig();
const opportunityInternalColumns: CrmDataTableColumn[] = [
{
title: t('org.department'),
Expand Down Expand Up @@ -418,16 +422,20 @@ export default async function useFormCreateTable(props: FormCreateTableProps) {
];

const invoiceInternalColumns: CrmDataTableColumn[] = [
{
title: t('contract.businessTitle.status'),
width: 120,
key: 'approvalStatus',
filterOptions: contractInvoiceStatusOptions,
sortOrder: false,
sorter: true,
filter: true,
render: props.specialRender?.approvalStatus,
},
...((dicApprovalEnable.value
? [
{
title: t('contract.businessTitle.status'),
width: 120,
key: 'approvalStatus',
filterOptions: contractInvoiceStatusOptions,
sortOrder: false,
sorter: true,
filter: true,
render: props.specialRender?.approvalStatus,
},
]
: []) as CrmDataTableColumn[]),
{
title: t('org.department'),
width: 120,
Expand Down Expand Up @@ -738,16 +746,20 @@ export default async function useFormCreateTable(props: FormCreateTableProps) {
sorter: true,
render: (row: any) => row.departmentName || '-',
},
{
title: t('common.status'),
width: 120,
key: 'approvalStatus',
filterOptions: quotationStatusOptions,
sortOrder: false,
sorter: true,
filter: true,
render: props.specialRender?.approvalStatus,
},
...((dicApprovalEnable.value
? [
{
title: t('common.status'),
width: 120,
key: 'approvalStatus',
filterOptions: quotationStatusOptions,
sortOrder: false,
sorter: true,
filter: true,
render: props.specialRender?.approvalStatus,
},
]
: []) as CrmDataTableColumn[]),
],
[FormDesignKeyEnum.CONTRACT]: [
{
Expand Down Expand Up @@ -786,16 +798,22 @@ export default async function useFormCreateTable(props: FormCreateTableProps) {
sortOrder: false,
sorter: true,
},
{
title: t('contract.approvalStatus'),
width: 120,
key: 'approvalStatus',
filterOptions: quotationStatusOptions.filter((item) => ![QuotationStatusEnum.VOIDED].includes(item.value)),
sortOrder: false,
sorter: true,
filter: true,
render: props.specialRender?.approvalStatus,
},
...((dicApprovalEnable.value
? [
{
title: t('contract.approvalStatus'),
width: 120,
key: 'approvalStatus',
filterOptions: quotationStatusOptions.filter(
(item) => ![QuotationStatusEnum.VOIDED].includes(item.value)
),
sortOrder: false,
sorter: true,
filter: true,
render: props.specialRender?.approvalStatus,
},
]
: []) as CrmDataTableColumn[]),
],
[FormDesignKeyEnum.CONTRACT_PAYMENT]: paymentInternalColumns,
[FormDesignKeyEnum.CONTRACT_CONTRACT_PAYMENT]: paymentInternalColumns,
Expand Down Expand Up @@ -1327,6 +1345,7 @@ export default async function useFormCreateTable(props: FormCreateTableProps) {
useTableRes,
customFieldsFilterConfig,
reasonOptions,
dicApprovalEnable,
fieldList,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -237,54 +237,6 @@
}
}

// 表格
const filterConfigList = computed<FilterFormItem[]>(() => [
{
title: t('opportunity.department'),
dataIndex: 'departmentId',
type: FieldTypeEnum.TREE_SELECT,
treeSelectProps: {
labelField: 'name',
keyField: 'id',
multiple: true,
clearFilterAfterSelect: false,
type: 'department',
checkable: true,
showContainChildModule: true,
containChildIds: [],
},
},
{
title: t('contract.status'),
dataIndex: 'stage',
type: FieldTypeEnum.SELECT_MULTIPLE,
operatorOption: COMMON_SELECTION_OPERATORS,
selectProps: {
options: contractStatusOptions,
},
},
{
title: t('contract.voidReason'),
dataIndex: 'voidReason',
type: FieldTypeEnum.INPUT,
},
{
title: t('contract.alreadyPayAmount'),
dataIndex: 'alreadyPayAmount',
type: FieldTypeEnum.INPUT_NUMBER,
},
{
title: t('contract.approvalStatus'),
dataIndex: 'approvalStatus',
operatorOption: COMMON_SELECTION_OPERATORS,
type: FieldTypeEnum.SELECT_MULTIPLE,
selectProps: {
options: quotationStatusOptions.filter((item) => ![QuotationStatusEnum.VOIDED].includes(item.value)),
},
},
...baseFilterConfigList,
]);

function getOperationGroupList(row: ContractItem) {
if (row.approvalStatus === QuotationStatusEnum.APPROVING) {
return [
Expand Down Expand Up @@ -454,7 +406,7 @@
}
}

const { useTableRes, customFieldsFilterConfig, fieldList } = await useFormCreateTable({
const { useTableRes, customFieldsFilterConfig, fieldList, dicApprovalEnable } = await useFormCreateTable({
formKey: FormDesignKeyEnum.CONTRACT,
operationColumn: {
key: 'operation',
Expand Down Expand Up @@ -556,6 +508,58 @@
};
});

// 表格
const filterConfigList = computed<FilterFormItem[]>(() => [
{
title: t('opportunity.department'),
dataIndex: 'departmentId',
type: FieldTypeEnum.TREE_SELECT,
treeSelectProps: {
labelField: 'name',
keyField: 'id',
multiple: true,
clearFilterAfterSelect: false,
type: 'department',
checkable: true,
showContainChildModule: true,
containChildIds: [],
},
},
{
title: t('contract.status'),
dataIndex: 'stage',
type: FieldTypeEnum.SELECT_MULTIPLE,
operatorOption: COMMON_SELECTION_OPERATORS,
selectProps: {
options: contractStatusOptions,
},
},
{
title: t('contract.voidReason'),
dataIndex: 'voidReason',
type: FieldTypeEnum.INPUT,
},
{
title: t('contract.alreadyPayAmount'),
dataIndex: 'alreadyPayAmount',
type: FieldTypeEnum.INPUT_NUMBER,
},
...(dicApprovalEnable.value
? [
{
title: t('contract.approvalStatus'),
dataIndex: 'approvalStatus',
operatorOption: COMMON_SELECTION_OPERATORS,
type: FieldTypeEnum.SELECT_MULTIPLE,
selectProps: {
options: quotationStatusOptions.filter((item) => ![QuotationStatusEnum.VOIDED].includes(item.value)),
},
},
]
: []),
...baseFilterConfigList,
]);

const crmTableRef = ref<InstanceType<typeof CrmTable>>();
const tableAdvanceFilterRef = ref<InstanceType<typeof CrmAdvanceFilter>>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -247,35 +247,6 @@
}
}

// 表格
const filterConfigList = computed<FilterFormItem[]>(() => [
{
title: t('opportunity.department'),
dataIndex: 'departmentId',
type: FieldTypeEnum.TREE_SELECT,
treeSelectProps: {
labelField: 'name',
keyField: 'id',
multiple: true,
clearFilterAfterSelect: false,
type: 'department',
checkable: true,
showContainChildModule: true,
containChildIds: [],
},
},
{
title: t('contract.approvalStatus'),
dataIndex: 'approvalStatus',
type: FieldTypeEnum.SELECT_MULTIPLE,
operatorOption: COMMON_SELECTION_OPERATORS,
selectProps: {
options: contractInvoiceStatusOptions,
},
},
...baseFilterConfigList,
]);

function getOperationGroupList(row: ContractInvoiceItem) {
if (props.readonly) {
return [];
Expand Down Expand Up @@ -412,7 +383,7 @@
});
}

const { useTableRes, customFieldsFilterConfig } = await useFormCreateTable({
const { useTableRes, customFieldsFilterConfig, dicApprovalEnable } = await useFormCreateTable({
formKey: props.isContractTab ? FormDesignKeyEnum.CONTRACT_INVOICE : FormDesignKeyEnum.INVOICE,
operationColumn: {
key: 'operation',
Expand Down Expand Up @@ -495,6 +466,39 @@
};
});

// 表格
const filterConfigList = computed<FilterFormItem[]>(() => [
{
title: t('opportunity.department'),
dataIndex: 'departmentId',
type: FieldTypeEnum.TREE_SELECT,
treeSelectProps: {
labelField: 'name',
keyField: 'id',
multiple: true,
clearFilterAfterSelect: false,
type: 'department',
checkable: true,
showContainChildModule: true,
containChildIds: [],
},
},
...(dicApprovalEnable.value
? [
{
title: t('contract.approvalStatus'),
dataIndex: 'approvalStatus',
type: FieldTypeEnum.SELECT_MULTIPLE,
operatorOption: COMMON_SELECTION_OPERATORS,
selectProps: {
options: contractInvoiceStatusOptions,
},
},
]
: []),
...baseFilterConfigList,
]);

const crmTableRef = ref<InstanceType<typeof CrmTable>>();
const tableAdvanceFilterRef = ref<InstanceType<typeof CrmAdvanceFilter>>();

Expand Down
Loading
Loading