【SoDiaoEditor電子病歷編輯器更新啦】--謹以獻給那些還在醫療行業奮斗的小伙伴們


為什么推薦的人這么少~~~~
 
更新(2017-4-18):
截止目前已知的已有2個三甲醫院在使用該編輯器,容我內心澎湃以下,O(∩_∩)O哈哈~
 
首先,這不是愚人節的玩笑,,,
本想着三月底發布來着,結果昨天又在兼容性上調出幾個bug,然后拖到了愚人節這天。
我是個追求完美的人,這點認識我的人,都能夠從我的相貌中看出來。
轉眼五個月過去了,期間不斷有人發來郵件進行鼓勵,並在不打賞的情況下厚着臉皮的來問我什么時候進行下一版的更新!
 
靜下心來,再次翻看原來的病歷編輯器發現了幾個問題:
  • 當我想添加擴展時,卧槽,沒留位置,不能擴展;
  • 當性能出問題時,卧槽,代碼不清晰,不好排查;
  • 當要解決bug時,卧槽,code分布太多,改死狗;
  • 當其他人拿出code問我時,卧槽,這不是我寫的code吧…
 
我焦慮了,code跟屎一樣,怎么可能是我這么優秀的人寫出來的?
“算了誰沒個過去啊”就這樣我先原諒了自己。
 
然后舉着充滿老繭的右手起誓:
新的版本中
  • ta必須能夠擴展;
  • ta必須容易使用;
  • ta必須考慮兼容性;
  • ta性能必須足夠優化;
  • ta設計必須足夠合理;
所以就只能重構了。
 
 
當然對比之前版本的優勢還是很明顯的:
  1. 接口更加簡潔
  2. 可擴展性更高
  3. 框架調整,為后續更新發力
  4. ...(想好再補充)
未來希望增加圖像控件,體溫的這些。
老版本模板如果要升級現有版本:
  1. 模板中的樣式去掉tl-改成sde-
  2. 模板中去除所有click綁定

以下為github中內容:

SoDiaoEditor.v2

預覽(國外站點打開會比較慢,請耐心等待,或者自己下載過來在本地打開)

  1. 設計模式--電子病歷設計器(擴展toolbar)
    建議給病歷模板設計者(開發人員,或者科主任)使用。
    可用來設計電子病歷模板,也可以當做電子病歷編輯器使用。
    此時輸入的值可利用SDE對象暴露出的接口獲取。
  1. 編輯模式--電子病歷設計器)
    建議給醫生使用。
    此時醫生可以在原有模板中添加已有的控件,也可以給科主任用來設計模板。
    亦可通過SDE對象暴露出來的接口獲取數據。
  1. 只讀模式--電子病歷設計器)
    建議該模式給醫生查看使用,在該模式下電子病歷中所有控件均不可編輯。
  1. 按鈕控制--電子病歷設計器
    按鈕通過事件控制!
  1. 編輯模式--電子病歷編輯器
    建議給醫生使用,此模式下醫生只能編輯控件中的值,其余均不可修改。
  1. 只讀模式--電子病歷編輯器
    該模式只允許查看,控件不可被編輯。
  1. 按鈕控制--電子病歷編輯器
    按鈕通過事件控制!

更新

本次更新以下內容:

  1. 新增以下toolbar:
編輯
  i. 剪切板
      1. 復制、粘貼、切剪
  ii. 字體
      1. 字體、字號、增大字體、縮小字體
插入
  i. 字符
  ii. 鏈接
      1. 取消鏈接
  iii. 圖片
      1. 圖片、塗鴉(蠻好用的你可以試試)
  iv. 表格 表格 i. 表格 1. 插入表格
  1. 設計器中新增SED對象
  2. 修復事件兼容性(暫不支持IE8及其以下的瀏覽器,后續會有解決方案)
  3. 增加toolbar可配置性。
  4. 解決上一個版本中的bug。

結構

data                    模擬異步請求的數據,正式項目中可忽略
dialogs                 擴展百度ueditor的dialogs
dist                    核心js文件
    js
        sde.design.js   SoDiaoEditor設計器核心js
        sde.editor.js   SoDiaoEditor編輯器核心js
example                 一些demo
ueditor                 百度ueditor庫,可替換成自己版本
sde.config.js           核心配置文件

使用

電子病歷設計器:
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>設計模式--電子病歷設計器</title>
    <!-- 注意以下各腳本之間的加載順序! -->
    <script type="text/javascript" src="sde.config.js"></script>
    <link rel="stylesheet" href="ueditor/themes/default/css/ueditor.css" />
    <script type="text/javascript" src="ueditor/ueditor.all.js"></script>
    <script type="text/javascript" src="ueditor/lang/zh-cn/zh-cn.js"></script>
    <script type="text/javascript"  src="dist/js/sde.design.js"></script>
</head>
<body>
    <script id="myEditor" type="text/plain" style="width:680px;height:1000px;">
        病歷模板...
    </script>
    <script type="text/javascript">
        window.onload = function() {
            var sde = new SDE({
                id: "myEditor",
                title: '<div style="height: 45px;overflow: hidden;">' +
                    '<div class="left" style="position:absolute;top:0;left:0;">' +
                    '<img src="../data/img/SoDiaoL.png" style="height:35px;margin:5px;border:none;" />' +
                    '</div>' +
                    '<h1 style="font-size: 14px;height: 45px;line-height: 45px;margin: 0 auto;text-align: center;font-weight: normal;color:#fff;" >SoDiaoEditor電子病歷編輯器</h1>' +
                    '</div>', //自定義title
            
toolbars: {
                    'sde-toolbar-file': 'file',
                    'sde-toolbar-editor': ['history', 'clipboard', 'fonts', 'paragraphs', 'styles'],
                    'sde-toolbar-insert': ['horizontal', 'spechars', 'link', 'img', 'map', 'code', 'table', 'formula', 'comment'],
                    'sde-toolbar-tables': ['table', 'blockmergecells'],
                    'sde-toolbar-views': ['directory', 'showcomment', 'preview'],
                    'sde-toolbar-tools': ['drafts', 'print', 'searchreplace', 'wordcount'],
                    'sde-toolbar-records': ['sdetemplate', 'sdecontrols'],
                }// 可自行刪減
            });
        };
    </script>
</body>
</html>

 

注意:

各個腳本之間的加載順序,已本例為准。 配置項(sde.config.js):

/*
默認配置項
*/
(function() {
    var URL = window.UEDITOR_HOME_URL || getUEBasePath();
    /*
    SDE_CONFIG 配置項
    */
    window.SDE_CONFIG = {
        HOME_URL: URL,
        HOME_URL_DIALOGS: URL + 'dialogs/',//SoDiaoEditor擴展ueditor的dialogs位置
        EDITOR_URL: URL + 'dist/js/sde.editor.js',
        MODE: "DESIGN", //DESIGN:設計|EDITOR:編輯|READONLY:只讀(所有節點都不可編輯)
        CONTROL_TEMPLATES: []//控件模板
    };
    /**
     * 配置項主體。注意,此處所有涉及到路徑的配置別遺漏URL變量。
     */
    window.UEDITOR_CONFIG = {
        UEDITOR_HOME_URL: URL + 'ueditor/', //為編輯器實例添加一個路徑,這個不能被注釋
        serverUrl: URL + "data/config.json", //URL + "net/controller.ashx", // 服務器統一請求接口路徑
        toolbars: [], //工具欄上的所有的功能按鈕和下拉框,可以在new編輯器的實例時選擇自己需要的重新定義
        autoClearinitialContent: false, //是否自動清除編輯器初始內容,注意:如果focus屬性設置為true,這個也為真,那么編輯器一上來就會觸發導致初始化的內容看不到了
        //iframeJsUrl: URL + window.SDE_CONFIG.EDITOR_URL + '?temp=' + new Date().getTime(), //給編輯區域的iframe引入一個js文件
        // iframeCssUrl: URL + 'EMR/css/default.css?temp=' + new Date().getTime(), //給編輯區域的iframe引入一個css文件
        allowDivTransToP: false, //允許進入編輯器的div標簽自動變成p標簽
        wordCount: false, //關閉字數統計
        elementPathEnabled: false, //關閉elementPath
        autoClearinitialContent: false
    };
    function getUEBasePath(docUrl, confUrl) {
        return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath());
    }
    function getConfigFilePath() {
        var configPath = document.getElementsByTagName('script');
        return configPath[configPath.length - 1].src;
    }
    function getBasePath(docUrl, confUrl) {
        var basePath = confUrl;
        if (/^(\/|\\\\)/.test(confUrl)) {
            basePath = /^.+?\w(\/|\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\/|\\\\)/, '');
        } else if (!/^[a-z]+:/i.test(confUrl)) {
            docUrl = docUrl.split("#")[0].split("?")[0].replace(/[^\\\/]+$/, '');
            basePath = docUrl + "" + confUrl;
        }
        return optimizationPath(basePath);
    }
    function optimizationPath(path) {
        var protocol = /^[a-z]+:\/\//.exec(path)[0],
            tmp = null,
            res = [];
        path = path.replace(protocol, "").split("?")[0].split("#")[0];
        path = path.replace(/\\/g, '/').split(/\//);
        path[path.length - 1] = "";
        while (path.length) {
            if ((tmp = path.shift()) === "..") {
                res.pop();
            } else if (tmp !== ".") {
                res.push(tmp);
            }

        }
        return protocol + res.join("/");
    }
    window.UE = {
        getUEBasePath: getUEBasePath
    };
})();

 

注意:

請重點關注window.SDE_CONFIG 和 window.UEDITOR_CONFIG 。 建議window.UEDITOR_CONFIG不要修改,可根據需求該window.SDE_CONFIG對象

電子病歷編輯器:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>編輯模式--電子病歷編輯器</title>
    <script type="text/javascript" src="dist/js/sde.editor.js"></script>
</head>
<body>
    <div id="myEditor" style="width:680px;height:1000px;margin:0 auto;">
        病歷內容...
    </div>
    <script type="text/javascript">
        window.onload = function() {
            var sde = new SDE({
                id: "myEditor",
                title: '<div style="height: 45px;overflow: hidden;">' +
                    '<div class="left" style="position:absolute;top:0;left:0;">' +
                    '<img src="../data/img/SoDiaoL.png" style="height:35px;margin:5px;border:none;" />' +
                    '</div>' +
                    '<h1 style="font-size: 14px;height: 45px;line-height: 45px;margin: 0 auto;text-align: center;font-weight: normal;color:#fff;" >SoDiaoEditor電子病歷編輯器</h1>' +
                    '</div>', //自定義title
                mode: 'EDITOR'//配置模式
            });
        };
    </script>
</body>
</html>

 

文檔

電子病歷設計器:
方法 說明 描述
ready(function(){}) 編輯器加載完成 (之后的所有方法必須在ready加載完成后使用)
html([html]) 獲取/設置所有編輯器中的html模板 如果html不傳遞,則為獲取,有值則為設置
getControl([id]) 獲取編輯器中的控件 id為可選,若為無則是獲取所有控件
setControl(ctl) 設置編輯器中指定id的控件值 ctl:{ID:'',VALUE:''}如果是select控件類型ctl:{ID:'',VALUE:'',TEXT:''}。ctl可以為數組也可以為對象,設置凍結REQUIRED:1為凍結,只讀不可操作
setMode(mode) 設置編輯器模式 mode可選:DESIGN(設計)、EDITOR(編輯)、READONLY(只讀)
電子病歷編輯器:
方法 說明 描述
getControl([id]) 獲取編輯器中的控件 id為可選,若為無則是獲取所有控件
setControl(ctl) 設置編輯器中指定id的控件值 ctl:{ID:'',VALUE:''}如果是select控件類型ctl:{ID:'',VALUE:'',TEXT:''}。ctl可以為數組也可以為對象,設置凍結REQUIRED:1為凍結,只讀不可操作
setMode(mode) 設置編輯器模式 mode可選:DESIGN(設計)、EDITOR(編輯)、READONLY(只讀)

貢獻&bug提交

  1. 可郵件至dd@sodiao.org
  2. 可以在github中的Iss中提交;

后續~~

本次框架調整相對合理,后續會持續跟進,toolbar也會相對完善。

最后 

謹以此,獻給那些還在醫療行業奮斗的小伙伴們

 相關鏈接:

【開源】SoDiaoEditor 可能是目前最好用的開源電子病歷編輯器(B/S架構)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM