Skip to content

Commit b3815d0

Browse files
fit2cloudwxxfit2-zhao
authored andcommitted
feat: process more config
1 parent 8362b3d commit b3815d0

15 files changed

Lines changed: 578 additions & 139 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import type { CordysAxios } from '@lib/shared/api/http/Axios';
2+
import {
3+
ApprovalPermissionsUrl,
4+
AddApprovalProcessUrl,
5+
UpdateApprovalProcessUrl,
6+
DeleteApprovalProcessUrl,
7+
ApprovalProcessDetailUrl,
8+
ToggleApprovalProcessUrl,
9+
ApprovalProcessPageUrl,
10+
} from '@lib/shared/api/requrls/system/process';
11+
import {
12+
AddApprovalProcessParams,
13+
ApprovalPermissionsDetail,
14+
ApprovalProcessDetail,
15+
ApprovalProcessItem,
16+
UpdateApprovalProcessParams,
17+
} from '@lib/shared/models/system/process';
18+
import type { CommonList } from '@lib/shared/models/common';
19+
import type { TableQueryParams } from '@lib/shared/models/common';
20+
21+
export default function useProcessApi(CDR: CordysAxios) {
22+
23+
// 审批流数据权限
24+
function getApprovalPermissions(type: string) {
25+
return CDR.get<ApprovalPermissionsDetail>({ url:`${ApprovalPermissionsUrl}/${type}` });
26+
}
27+
// 审批流数据权限
28+
function getApprovalProcessList(data: TableQueryParams) {
29+
return CDR.post<CommonList<ApprovalProcessItem>>({ url:ApprovalProcessPageUrl, data});
30+
}
31+
// 添加审批流
32+
function addApprovalProcess(data: AddApprovalProcessParams) {
33+
return CDR.post({ url:AddApprovalProcessUrl, data });
34+
}
35+
// 更新审批流
36+
function updateApprovalProcess(data: UpdateApprovalProcessParams) {
37+
return CDR.post({ url:UpdateApprovalProcessUrl,data });
38+
}
39+
// 审批流详情
40+
function approvalProcessDetail(id: string) {
41+
return CDR.get<ApprovalProcessDetail>({ url:`${ApprovalProcessDetailUrl}/${id}` });
42+
}
43+
// 删除审批流
44+
function deleteApprovalProcess(id: string) {
45+
return CDR.get({ url:`${DeleteApprovalProcessUrl}/${id}` });
46+
}
47+
// 切换审批流
48+
function toggleApprovalProcess(id: string, enable: boolean) {
49+
return CDR.get({ url:`${ToggleApprovalProcessUrl}/${id}`,params: { enable } });
50+
}
51+
52+
return {
53+
getApprovalProcessList,
54+
getApprovalPermissions,
55+
addApprovalProcess,
56+
updateApprovalProcess,
57+
approvalProcessDetail,
58+
deleteApprovalProcess,
59+
toggleApprovalProcess
60+
};
61+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export const ApprovalPermissionsUrl = '/approval-flow/status-permission/setting'; // 审批流数据权限
2+
export const ApprovalProcessPageUrl = '/approval-flow/page'; // 审批流列表
3+
export const AddApprovalProcessUrl = '/approval-flow/add'; // 新增审批流
4+
export const UpdateApprovalProcessUrl = '/approval-flow/update'; // 修改审批流
5+
export const DeleteApprovalProcessUrl = '/approval-flow/delete'; // 删除审批流
6+
export const ApprovalProcessDetailUrl = '/approval-flow/get'; // 审批流详情
7+
export const ToggleApprovalProcessUrl = '/approval-flow/enable'; // 启用|禁用审批流

frontend/packages/lib-shared/models/system/process.ts

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,104 @@ import { ProcessStatusEnum } from "@lib/shared/enums/process";
22

33

44
export type ProcessStatusType = Exclude<ProcessStatusEnum, ProcessStatusEnum.VOIDED>;
5+
6+
export interface BaseItem {
7+
id: string;
8+
name: string;
9+
}
10+
11+
// 权限项
12+
export interface PermissionItem {
13+
id: string;
14+
name: string;
15+
enabled: boolean;
16+
}
17+
18+
// 状态权限
19+
export interface ApprovalPermission {
20+
approvalStatus: ProcessStatusType;
21+
permission: string[];
22+
enabled: boolean;
23+
}
24+
25+
// 审批流程基本信息接口
26+
export interface ApprovalProcessItem extends BaseItem {
27+
number: string;
28+
formType: string;
29+
executeTiming: string;
30+
enable: boolean;
31+
submitterCanRevoke: boolean;
32+
allowBatchProcess: boolean;
33+
allowWithdraw: boolean;
34+
allowAddSign: boolean;
35+
duplicateApproverRule: string;
36+
requireComment: boolean;
37+
organizationId: string;
38+
createUserName: string;
39+
createUser: string;
40+
updateUser: string;
41+
updateUserName: string;
42+
createTime: number;
43+
updateTime: number;
44+
}
45+
46+
// 审批权限详情
47+
export interface ApprovalPermissionsDetail {
48+
permissions: PermissionItem[];
49+
statusPermissions: ApprovalPermission[];
50+
}
51+
52+
// 审批流程节点
53+
export interface ApprovalProcessNode extends BaseItem {
54+
nodeType: string;
55+
sort: number;
56+
children: ApprovalProcessNode[];
57+
}
58+
59+
// 状态权限配置
60+
export interface ApprovalPermission {
61+
status: ProcessStatusEnum;
62+
statusLabel: string;
63+
permissions: PermissionItem[];
64+
}
65+
66+
// 状态权限
67+
export interface StatusPermissions {
68+
approvalStatus: ProcessStatusType;
69+
permission: string;
70+
enabled: boolean;
71+
}
72+
73+
// 基本表单参数
74+
export interface BasicFormParams {
75+
name: string;
76+
formType: string;
77+
description: string;
78+
executeTiming: string[];
79+
}
80+
81+
// 更多设置参数
82+
export interface MoreSettingsParams {
83+
submitterCanRevoke: boolean;
84+
allowBatchProcess: boolean;
85+
allowWithdraw: boolean;
86+
allowAddSign: boolean;
87+
duplicateApproverRule: string;
88+
requireComment: boolean;
89+
statusPermissions: StatusPermissions[];
90+
}
91+
92+
export interface AddApprovalProcessParams extends BasicFormParams, MoreSettingsParams {
93+
enable: boolean;
94+
nodes: ApprovalProcessNode[];
95+
}
96+
97+
export interface UpdateApprovalProcessParams extends AddApprovalProcessParams {
98+
id: string;
99+
}
100+
101+
export interface ApprovalProcessDetail extends UpdateApprovalProcessParams {
102+
permissions: PermissionItem[];
103+
id: string;
104+
number: string;
105+
}

frontend/packages/mobile/src/store/modules/app/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ const useAppStore = defineStore('app', {
178178
// const licenseStore = useLicenseStore();
179179
// if (!licenseStore.hasLicense()) return;
180180
const res = await getThirdConfigByType(CompanyTypeEnum.SQLBot);
181-
if (res.config.sqlBotChatEnable) {
181+
if (res.config?.sqlBotChatEnable) {
182182
await loadScript(res.config?.appSecret as string, { identifier: CompanyTypeEnum.SQLBot });
183183
}
184184
},

frontend/packages/web/src/api/modules/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import useLoginApi from '@lib/shared/api/modules/system/login';
1616
import useMessageApi from '@lib/shared/api/modules/system/message';
1717
import useModuleApi from '@lib/shared/api/modules/system/module';
1818
import useOrgApi from '@lib/shared/api/modules/system/org';
19+
import useProcessApi from '@lib/shared/api/modules/system/process';
1920
import useRoleApi from '@lib/shared/api/modules/system/role';
2021

2122
import useDiscreteApi from '@/hooks/useDiscreteApi';
@@ -47,6 +48,7 @@ const dashboardApi = useDashboard(CDR);
4748
const opportunityApi = useOpportunityApi(CDR);
4849
const contractApi = useContractApi(CDR);
4950
const orderApi = useOrderApi(CDR);
51+
const processApi = useProcessApi(CDR);
5052

5153
export const {
5254
getOrderFormConfig,
@@ -759,3 +761,13 @@ export const {
759761
agentApplicationOptions,
760762
getMkApplication,
761763
} = agentApi;
764+
765+
export const {
766+
getApprovalProcessList,
767+
getApprovalPermissions,
768+
addApprovalProcess,
769+
updateApprovalProcess,
770+
approvalProcessDetail,
771+
deleteApprovalProcess,
772+
toggleApprovalProcess,
773+
} = processApi;

frontend/packages/web/src/components/business/crm-process-drawer/index.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<CrmDrawer
33
v-model:show="visible"
44
width="75%"
5+
:min-width="800"
56
:footer="false"
67
:closable="false"
78
:close-on-esc="false"

frontend/packages/web/src/components/pure/crm-drawer/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@
172172
const handleMouseMove = (_event: MouseEvent) => {
173173
if (resizing.value) {
174174
const newWidth = initialWidth + (startX - _event.clientX); // 新的宽度等于当前抽屉宽度+鼠标移动的距离
175-
if (newWidth >= 480 && newWidth <= window.innerWidth * 0.9) {
175+
if (newWidth >= (props.minWidth || 480) && newWidth <= window.innerWidth * 0.9) {
176176
// 最大最小宽度限制,最小宽度为480,最大宽度为视图窗口宽度的90%
177177
drawerWidth.value = newWidth;
178178
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { FormDesignKeyEnum } from '@lib/shared/enums/formDesignEnum';
2+
import { ProcessStatusEnum } from '@lib/shared/enums/process';
3+
import { ProcessStatusType } from '@lib/shared/models/system/process';
4+
5+
export type PermissionSuffix = 'READ' | 'UPDATE' | 'DELETE' | 'DOWNLOAD' | 'EXPORT' | 'VOIDED' | 'STAGE' | 'PAYMENT';
6+
7+
type PartialModuleDefaultPermissionConfig = Partial<Record<ProcessStatusType, PermissionSuffix[]>>;
8+
9+
export const processDefaultStatusPermissionMap: Partial<
10+
Record<FormDesignKeyEnum | string, PartialModuleDefaultPermissionConfig>
11+
> = {
12+
[FormDesignKeyEnum.OPPORTUNITY_QUOTATION]: {
13+
[ProcessStatusEnum.APPROVED]: ['READ', 'DOWNLOAD', 'VOIDED'],
14+
[ProcessStatusEnum.APPROVING]: ['READ', 'VOIDED'],
15+
[ProcessStatusEnum.UNAPPROVED]: ['READ', 'UPDATE', 'DELETE', 'VOIDED'],
16+
[ProcessStatusEnum.REVOKED]: ['READ', 'UPDATE', 'DELETE', 'VOIDED'],
17+
[ProcessStatusEnum.PENDING]: ['READ', 'UPDATE', 'DELETE', 'VOIDED'],
18+
},
19+
[FormDesignKeyEnum.CONTRACT]: {
20+
[ProcessStatusEnum.APPROVED]: ['READ', 'EXPORT', 'STAGE', 'PAYMENT'],
21+
[ProcessStatusEnum.APPROVING]: ['READ', 'PAYMENT'],
22+
[ProcessStatusEnum.UNAPPROVED]: ['READ', 'UPDATE', 'DELETE', 'STAGE', 'PAYMENT'],
23+
[ProcessStatusEnum.REVOKED]: ['READ', 'UPDATE', 'DELETE', 'STAGE', 'PAYMENT'],
24+
[ProcessStatusEnum.PENDING]: ['READ', 'UPDATE', 'DELETE', 'STAGE', 'PAYMENT'],
25+
},
26+
[FormDesignKeyEnum.ORDER]: {
27+
[ProcessStatusEnum.APPROVED]: ['READ', 'DOWNLOAD'],
28+
[ProcessStatusEnum.APPROVING]: ['READ'],
29+
[ProcessStatusEnum.UNAPPROVED]: ['READ', 'UPDATE', 'DELETE'],
30+
[ProcessStatusEnum.REVOKED]: ['READ', 'UPDATE', 'DELETE'],
31+
[ProcessStatusEnum.PENDING]: ['READ', 'UPDATE', 'DELETE'],
32+
},
33+
[FormDesignKeyEnum.INVOICE]: {
34+
[ProcessStatusEnum.APPROVED]: ['READ', 'EXPORT'],
35+
[ProcessStatusEnum.APPROVING]: ['READ'],
36+
[ProcessStatusEnum.UNAPPROVED]: ['READ', 'UPDATE', 'DELETE'],
37+
[ProcessStatusEnum.REVOKED]: ['READ', 'UPDATE', 'DELETE'],
38+
[ProcessStatusEnum.PENDING]: ['READ', 'UPDATE', 'DELETE'],
39+
},
40+
};
41+
42+
export function matchPermissionBySuffix(permissionId: string, suffix: PermissionSuffix) {
43+
return permissionId === suffix || permissionId.endsWith(`:${suffix}`);
44+
}
Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { FormDesignKeyEnum } from '@lib/shared/enums/formDesignEnum';
22
import { ProcessStatusEnum } from '@lib/shared/enums/process';
33
import { useI18n } from '@lib/shared/hooks/useI18n';
4-
import { ProcessStatusType } from '@lib/shared/models/system/process';
4+
import { BasicFormParams, MoreSettingsParams, ProcessStatusType } from '@lib/shared/models/system/process';
55

66
import { StatusInfo } from '@/components/business/crm-approval-status/index.vue';
77

@@ -15,26 +15,19 @@ export const processStatusMap: Record<ProcessStatusType, StatusInfo> = {
1515
tagBgColor: 'var(--success-5)',
1616
tagColor: 'var(--success-green)',
1717
},
18-
[ProcessStatusEnum.UNAPPROVED]: {
19-
label: t('common.rejected'),
20-
icon: 'iconicon_close_circle_filled',
21-
color: 'var(--error-red)',
22-
tagBgColor: 'var(--error-5)',
23-
tagColor: 'var(--error-red)',
24-
},
2518
[ProcessStatusEnum.APPROVING]: {
2619
label: t('common.reviewing'),
2720
icon: 'iconicon_wait',
2821
color: 'var(--info-blue)',
2922
tagBgColor: 'var(--warning-5)',
3023
tagColor: 'var(--warning-yellow)',
3124
},
32-
[ProcessStatusEnum.PENDING]: {
33-
label: t('common.pending'),
34-
icon: 'iconicon_minus_circle_filled1',
35-
color: 'var(--text-n4)',
36-
tagBgColor: '',
37-
tagColor: '',
25+
[ProcessStatusEnum.UNAPPROVED]: {
26+
label: t('common.rejected'),
27+
icon: 'iconicon_close_circle_filled',
28+
color: 'var(--error-red)',
29+
tagBgColor: 'var(--error-5)',
30+
tagColor: 'var(--error-red)',
3831
},
3932
[ProcessStatusEnum.REVOKED]: {
4033
label: t('common.revoked'),
@@ -43,6 +36,14 @@ export const processStatusMap: Record<ProcessStatusType, StatusInfo> = {
4336
tagBgColor: '',
4437
tagColor: '',
4538
},
39+
[ProcessStatusEnum.PENDING]: {
40+
label: t('common.pending'),
41+
icon: 'iconicon_minus_circle_filled1',
42+
color: 'var(--text-n4)',
43+
tagBgColor: '',
44+
tagColor: '',
45+
},
46+
4647
[ProcessStatusEnum.NONE]: {
4748
label: '-',
4849
icon: '',
@@ -57,16 +58,38 @@ export const processStatusOptions = Object.entries(processStatusMap).map(([key,
5758
value: key,
5859
}));
5960

60-
export const defaultBasicForm = {
61-
businessType: FormDesignKeyEnum.OPPORTUNITY_QUOTATION,
61+
export const defaultBasicForm: BasicFormParams = {
62+
formType: FormDesignKeyEnum.OPPORTUNITY_QUOTATION,
6263
name: '',
63-
executionTiming: ['CREATE'],
64+
executeTiming: ['CREATE'],
6465
description: '',
6566
};
6667

67-
export const defaultMoreConfig = {
68-
submitterAuthority: true,
69-
approverAuthority: [],
70-
autoApproval: 'firstNodeApproval',
71-
approvalOpinion: false,
68+
export const defaultMoreConfig: MoreSettingsParams = {
69+
submitterCanRevoke: true,
70+
allowBatchProcess: false,
71+
allowWithdraw: false,
72+
allowAddSign: false,
73+
duplicateApproverRule: 'FIRST_ONLY',
74+
requireComment: false,
75+
statusPermissions: [],
7276
};
77+
78+
export const businessTypeOptions = [
79+
{
80+
label: t('crmFormCreate.drawer.quotation'),
81+
value: FormDesignKeyEnum.OPPORTUNITY_QUOTATION,
82+
},
83+
{
84+
label: t('module.contract'),
85+
value: FormDesignKeyEnum.CONTRACT,
86+
},
87+
{
88+
label: t('module.invoiceApproval'),
89+
value: FormDesignKeyEnum.INVOICE,
90+
},
91+
{
92+
label: t('module.order'),
93+
value: FormDesignKeyEnum.ORDER,
94+
},
95+
];

frontend/packages/web/src/store/modules/app/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ const useAppStore = defineStore('app', {
355355
// const licenseStore = useLicenseStore();
356356
// if (!licenseStore.hasLicense()) return;
357357
const res = await getThirdConfigByType(CompanyTypeEnum.SQLBot);
358-
if (res.config.sqlBotChatEnable) {
358+
if (res.config?.sqlBotChatEnable) {
359359
await loadScript(res.config?.appSecret as string, { identifier: CompanyTypeEnum.SQLBot });
360360
}
361361
},

0 commit comments

Comments
 (0)