跳至主要內容

知识库

大约 4 分钟

异步数据

由于知识库数据量通常较大,所以默认采用异步初始化主目录,点击目录展开节点后异步加载数据的方式。

默认配置

异步加载方式的默认配置如下:


let option = {
        ...
        dictionary: [  //知识库
            {name: '体征', isParent:true, treeUrl:'/dict?category=10'},
            {name: '症状', isParent:true, treeUrl:'/dict?category=20'},
            {name: '卫生信息数据元', isParent:true, treeUrl:'/dict?category=40'},
            {name: '电子病历数据集', isParent:true, treeUrl:'/dict?category=50'},
            {name: '国家医保标准', isParent:true, treeUrl:'/dict?category=80'},
            {name: '省数据平台标准', isParent:true, treeUrl:'/dict?category=90'},
        ],
        dictSetting:{           //知识库配置
            treeFilter: function(treeId, treeNode, data){ return data }, //知识库节点过滤,返回数组
            itemFilter: function(treeNode, data){ return data }, //知识库选择项过滤, 返回数组
            simpleData: true,   //是否使用简单列表数据结构 [{id, pid, ....}, {} , ...]
            itemUrl:'/dictitem'//字典选项URL
            withLabel: true,   //文本框是否带入标签
            labelAlign: 'auto', //下拉框标签位置(auto, left, right)
        }
        ...
    }

配置说明

  • name:'体征' 节点显示名称

  • isParent:true 节点目录, 设置为 false 无法展开子目录

  • treeUrl:'/dict?category=10' 节点目录展开后的数据接口地址

  • simpleData: true 知识库节点数据可以 [{id, pid, ....}] 的数组格式提供,而不需要后台提供赋值的多层次结构数据 [{id, pid, children:[ ....]}],减少后台的数据的复杂度

  • itemUrl:'/dictitem' 点击有明细选项的节点,获取明细选项的接口地址:

    • itemUrl 可以配置于 option.dictSetting.itemUrl 中,也可以配置于 option.dictionary[{itemUrl}] 中, 可以为特定目录定义选项接口路径
    • 例如: [{name: '体征', isParent:true, treeUrl:'/dict?category=10'}] 可以为体征单独指定节点数据接口路径
  • withLabel: true 知识库节点类型为【文本】时,是否带入前置标签, 如:患者姓名:[姓名]

  • labelAlign: 'auto' 知识库节点类型为【下拉框】时,标签的位置:

    • 当设置为auto时,下拉选项中存在有/无关键字则标签在右侧,如 [无]咳嗽神态[自然]
    • 当设置为left, right时, 标签可以放于下拉框的左侧或右侧
    • 当设置为false 时, 下拉框左右无标签

知识库目录

  • treeUrl 接口返回数据格式: id, pid, style, name 必须提供
  • style 类型为 text, num, date, time, list, check, radio
[
    {
        "id": 695,
        "pid": 0,
        "category": "20",
        "style": null,
        "code": null,
        "name": "儿科",
        "en_name": null,
        "domain": null,
        "len": null
    },
    {
        "id": 696,
        "pid": 695,
        "category": "20",
        "style": "list",
        "code": "675",
        "name": "发热",
        "en_name": null,
        "domain": null,
        "len": null
    },
    {
        "id": 697,
        "pid": 695,
        "category": "20",
        "style": "list",
        "code": "676",
        "name": "诱因",
        "en_name": null,
        "domain": null,
        "len": null
    }
]

知识库节点

  • itemUrl 接口返回数据格式: text, value 必须提供
[
    {
        "text": "步态稳健",
        "value": "1"
    },
    {
        "text": "步态不稳",
        "value": "2"
    },
    {
        "text": "痉挛性偏瘫",
        "value": "3"
    },
    {
        "text": "歇性跛行",
        "value": "4"
    }
]

自定义处理

由于用户系统的服务端接口返回数据格式无法直接返回以上数组结构,可以使用过滤器进行用户自定义过滤替换;


/*例如 treeUrl 接口返回的JSON格式为
{
    "msg": "操作成功",
    "code": 200,
    "list": [
        {
            "id": 5,
            "pid": 0,
            "category": "10",
            "style": null,
            "code": null,
            "name": "一般情况",
            "enName": null,
            "domain": null,
            "len": null,
            "emrDictItemList": null
        },
        {
            "id": 6,
            "pid": 5,
            "category": "10",
            "style": "list",
            "code": "2",
            "name": "步态",
            "enName": null,
            "domain": null,
            "len": null,
            "emrDictItemList": null
        }
    ]
}
*/

//定义用户处理函数
let myTreeFilter = function(reeId, treeNode, result){
  return result.list
}

/*例如 itemUrl 接口返回的JSON格式为
{
    "msg": "操作成功",
    "code": 200,
    "data": {
        "id": 696,
        "pid": 695,
        "category": "20",
        "style": "list",
        "code": "675",
        "name": "发热",
        "enName": null,
        "domain": null,
        "len": null,
        "emrDictItemList": [
            {
                "id": 8437,
                "dictId": 696,
                "value": "1",
                "text": "有"
            },
            {
                "id": 8438,
                "dictId": 696,
                "value": "2",
                "text": "无"
            }
        ]
    }
}
*/

//定义用户处理函数
let myItemFilter = function(reeId, treeNode, result){
    return result.data.emrDictItemList
}

//知识库配置项
let option = {
     dictSetting:{ 
            //知识库节点过滤,返回数组
            treeFilter: myTreeFilter,
            //知识库选择项过滤, 返回数组
            itemFilter: myItemFilter
     }
}

同步数据

  1. 选项配置中设置空数组

let option = {
        ...
        dictionary: [],    //设置空数组
        dictSetting:{           //知识库配置
            simpleData: true,   //是否使用简单列表数据结构 [{id, pid, ....}, {} , ...]
            itemUrl:'/dictitem'//字典选项URL
            withLabel: true,   //文本框是否带入标签
            labelAlign: 'auto', //下拉框标签位置(auto, left, right)
        }
        ...
    }
  1. 编辑器初始化完成后获取 editor 对象

    //获取节点数据
    let dictionary = 
        [
            {
                "id": 1,
                "pid": 0,
                "category": "20",
                "style": null,
                "code": null,
                "name": "儿科",
                "en_name": null,
                "domain": null,
                "len": null
            },
            {
                "id": 2,
                "pid": 1,
                "category": "20",
                "style": "list",
                "code": "675",
                "name": "发热",
                "en_name": null,
                "domain": null,
                "len": null
            },
            {
                "id": 3,
                "pid": 1,
                "category": "20",
                "style": "list",
                "code": "676",
                "name": "诱因",
                "en_name": null,
                "domain": null,
                "len": null
            }
            ...
        ]

    //初始化知识库树节点
    editor.initDict(dictionary)

自定义处理

由于知识库使用的是 zTree 插件,可以进一步参考 zTree API文档open in new window