/** * 选项分组配置 */ interface CFPDOptionGroup { /** * 当前所在层级 */ currentLevel?: number; /** * 组的标题 */ groupTitle: string; /** * 是否显示组号 */ showGroupTitle: boolean; /** * 组的Uuid */ uuid: string; /** * 子列表,其中可能是选项配置,也坑是嵌套的组 */ children: CFPDOptionGroupChild[]; /** * 随机模式 */ randomMode: OPTION_GROUP_RANDOM_MODE; /** * 组的颜色 */ color?: string; /** * 类型 */ type: OPTION_GROUP_CHILD_TYPE; } /** * 选项分组与选项的引用关系 */ interface CFPDOptionGroupsRelationship { /** * 以选项ID作为key的Map关系 */ optionsRelationship: { [optionUuid: string]: string[] }; /** * 以组ID作为key的Map关系 */ groupsRelationship: { [groupUuid: string]: { parentUuids: string[]; optionUuids: string[]; }; }; } /** * 选项组中直接包含选项时的选项配置 */ interface CFPDGroupedOptionInfo { /** * 关联选项的uuid */ optionUuid: string; /** * 所属选项组的组id列表 */ groupUuids: string[]; /** * 关联文本 */ text: string; /** * 类型 */ type: OPTION_GROUP_CHILD_TYPE; /** * 当前所属层级 */ currentLevel?: number; } /** * 选项组的子项的两种形态,分别是选项组和选项 * 由于目前选项组的顶层也使用了作为选项组的基本数据结构 */ type CFPDOptionGroupChild = CFPDOptionGroup | CFPDGroupedOptionInfo; /** * 具备选项分组功能的节点 */ interface CFPDMOptionGroupNode extends CFPDBQuestionNode { /** * 选项分组设置 * 如果有这个设置,那么就不使用原始的按照选项来排序,而是按照其他选项来分组 */ optionGroups?: CFPDOptionGroup[]; /** * 选项组和选项的关联关系 */ optionGroupsRelationship?: CFPDOptionGroupsRelationship; }