Files
cody-crm/frontend/packages/lib-shared/models/system/module.ts
wangziqi 72e2110987
Some checks failed
Synchronize to Gitee / repo-sync (push) Has been cancelled
Typos Checking / Spell Check with Typos (push) Has been cancelled
chore: initial commit
2026-06-23 11:56:23 +08:00

275 lines
6.6 KiB
TypeScript

import type { FormDesignKeyEnum, FormLinkScenarioEnum } from '../../enums/formDesignEnum';
import type { ModuleField, TableQueryParams } from '../common';
import type { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
import { MemberSelectTypeEnum, ReasonTypeEnum } from '@lib/shared/enums/moduleEnum';
export interface ModuleNavCommon {
id?: string;
createUser?: string;
updateUser?: string;
createTime?: number;
updateTime?: number;
organizationId?: string;
enable: boolean;
pos?: number;
}
// 模块首页-导航模块列表
export interface ModuleNavBaseInfoItem extends ModuleNavCommon {
moduleKey: string;
disabled?: boolean;
}
// 顶部导航配置
export interface ModuleNavTopItem extends ModuleNavCommon {
navigationKey: string;
}
export interface ModuleNavItem extends ModuleNavBaseInfoItem {
icon: string;
key: string;
label: string;
}
// 模块首页-导航模块排序入参
export interface ModuleSortParams {
start: number;
end: number;
dragModuleId: string; // 拖拽模块ID
}
export interface SelectedUsersItem {
id: string; // ID
scope?: MemberSelectTypeEnum; // 范围
name: string; // 名称
disabled?: boolean;
}
export interface ModuleConditionsItem {
column: string;
operator: string;
value: string;
scope?: string[];
}
export interface OpportunityBaseInfoItem {
name: string;
enable: boolean;
operator: string; // 操作符
auto: boolean; // 自动回收
}
// 模块商机列表
export interface OpportunityItem extends OpportunityBaseInfoItem {
id: string;
organizationId: string;
ownerId: string; // 管理员ID
scopeId: string; // 范围ID
condition: string; // 回收条件
createUser: string;
updateUser: string;
createTime: number;
updateTime: number;
members: SelectedUsersItem[]; // 成员集合
owners: SelectedUsersItem[]; // 管理员集合
createUserName: string;
updateUserName: string;
}
// 模块商机详情
export interface OpportunityDetail extends OpportunityBaseInfoItem {
id?: string;
conditions: ModuleConditionsItem[]; // 规则条件集合
}
export interface OpportunityParams extends OpportunityDetail {
scopeIds: string[];
ownerIds: string[];
}
// 线索池领取规则
export interface CluePoolPickRuleParams {
limitOnNumber: boolean; // 是否限制领取数量
pickNumber?: number; // 领取数量
limitPreOwner: boolean; // 是否限制前归属人领取
pickIntervalDays?: number; // 领取间隔天数
limitNew: boolean; // 是否限制新数据领取
newPickInterval?: number; // 新数据领取间隔天数
}
// 线索池回收规则
export interface CluePoolRecycleRuleParams {
operator: string; // 操作符
conditions: ModuleConditionsItem[]; // 规则条件集合
}
// 编辑线索池请求参数
export interface CluePoolParams {
id?: string; // ID
name: string; // 线索池名称
scopeIds: string[]; // 范围ID集合
ownerIds: string[]; // 管理员ID集合
enable: boolean; // 启用/禁用
auto: boolean; // 自动回收
pickRule: CluePoolPickRuleParams; // 领取规则
recycleRule: CluePoolRecycleRuleParams; // 回收规则
hiddenFieldIds: string[]; // 隐藏的表格字段
}
export interface CluePoolForm extends Omit<CluePoolParams, 'scopeIds' | 'ownerIds'> {
adminIds: SelectedUsersItem[];
userIds: SelectedUsersItem[]; // 成员ID
hiddenFieldIds: string[]; // 隐藏的表格字段
}
// 线索池列表项
export interface CluePoolItem {
id: string;
createUser: string;
updateUser: string;
updateUserName: string;
createTime: number;
updateTime: number;
name: string;
scopeId: string;
organizationId: string;
ownerId: string;
enable: boolean;
auto: boolean;
members: SelectedUsersItem[];
owners: SelectedUsersItem[];
pickRule: CluePoolPickRuleParams; // 领取规则
recycleRule: CluePoolRecycleRuleParams; // 回收规则
fieldConfigs: {
editable: boolean;
enable: boolean;
fieldId: string;
fieldName: string;
}[]; // 隐藏的表格字段
}
// 库容参数
export interface CapacityParams {
scopeIds: string[]; // 范围ID集合
capacity?: number; // 容量
}
// 库容列表项
export interface CapacityItem {
id: string;
createUser: string;
updateUser: string;
createTime: number;
updateTime: number;
organizationId: string;
scopeId: string;
capacity: number;
members: SelectedUsersItem[];
filters?: { column: 'string'; operator: 'string'; value: 'string' }[];
}
// 表单设计保存参数
export type FormFooterDirection = 'flex-row' | 'flex-row-reverse' | 'justify-center';
export interface FormActionButton {
text: string;
enable: boolean;
}
export interface FormFieldLinkItem {
current: string;
link: string;
enable: boolean;
}
export interface FormConfigLinkScenarioItem {
key: FormLinkScenarioEnum;
linkFields: FormFieldLinkItem[];
}
export type FormConfigLinkProp = Partial<Record<FormDesignKeyEnum, FormConfigLinkScenarioItem[]>>;
export type FormViewSize = 'small' | 'medium' | 'large';
export interface FormConfig {
layout: number;
labelPos: 'left' | 'top';
inputWidth: 'custom' | 'full';
optBtnContent: FormActionButton[];
optBtnPos: FormFooterDirection;
viewSize?: FormViewSize;
linkProp?: FormConfigLinkProp;
}
export interface SaveFormDesignConfigParams {
formKey: FormDesignKeyEnum;
fields: FormCreateField[];
formProp: FormConfig;
}
export interface FormDesignConfigDetailParams {
fields: FormCreateField[];
formProp: FormConfig;
}
export interface FormDesignDataSourceTableQueryParams extends TableQueryParams {
field: string;
}
export interface ReasonParams {
id?: string;
name: string;
module: ReasonTypeEnum;
}
export interface UpdateReasonEnableParams {
module: ReasonTypeEnum;
enable: boolean;
}
export interface ReasonItem {
id: string;
createUser: string;
updateUser: string;
createTime: number;
updateTime: number;
name: string;
module: ReasonTypeEnum;
type: string;
organizationId: string;
}
export interface ReasonConfig {
enable: boolean;
dictList: ReasonItem[];
}
export interface SortReasonParams {
dragDictId: string; // 拖拽元素id
start: number; // 排序前
end: number; // 排序后
}
export interface DefaultSearchSetFormModel {
searchFields: Record<string, any>;
resultDisplay: boolean;
sortSetting: string[];
}
export interface CheckRepeatParams {
id: string;
value: string;
formKey: string;
}
export interface CheckRepeatInfo {
repeat: boolean;
name: string;
}
export interface GetRefDataSourceFieldParams {
sourceIds: string[];
dataSourceType: string;
}
export interface RefDataSourceFieldItem {
id: string;
moduleFields: ModuleField[];
optionMap?: Record<string, any[]>;
[key: string]: any;
}